如果要将一个有序字符串列表与另一个列表进行比较,我决定将其作为一个映射来实现,其中键是字符串的第一个字符,字符串列表的值具有相同的第一个字符。总之,我有这样一件事:
var list1:Map[Char, List[String]] = Map('a' -> List("alone", "away"))
var list2:List[String] = List("I", "am", "alone", "at", "home", "watching", "batman", "XD")现在,以这种方式实现了我的代码,与他们一起工作“很困难”,试图将第一个代码看作一个简单的列表,所以我想知道是否还有更好的方法来解决这个问题。如果我必须验证list1是否“单独”,我必须首先获得密钥'a‘,然后调用方法包含。我必须实现这样的东西。
if ( list1( "alone".charAt(0) ).contains( "alone" ) ) ...每次必须提取键,然后比较列表,这是很难看的,我想要创建一个新的地图(或列表)来实现这个功能(它会自动提取键,然后处理列表)。你有什么建议?谢谢。
编辑:,我重写了问题的一部分,澄清了一些要点。第一个列表是有序的,第二个列表是没有的。
发布于 2011-06-05 18:56:36
从我所见你真的只想要一份清单。那就用个单子。(或者可能是SortedSet http://www.scala-lang.org/api/current/scala/collection/SortedSet.html)
您似乎关心性能,但既没有说明哪一部分的算法需要慢下来,也没有说明它需要的速度有多快,也没有给出您所选择的方法确实满足这些性能要求的合理论点。所以再说一遍:只需使用列表。然后衡量业绩。如果它真的要慢下来,那么从它创建一个基准,在这里发布代码和结果,并说明它需要多快。
那么人们就能提供帮助了。
发布于 2011-06-05 16:58:21
我不知道为什么使用映射可以帮助您比较字符串列表,但无论如何:
如果您不介意使用可变集合,并且确定列表中没有重复(因此实际上可以使用集合),那么可以使用MultiMap特性:
import scala.collection.mutable._
val mm = new HashMap[Char,Set[String]] with MultiMap[Char,String]
Seq("alone","away").foreach(s => mm.addBinding(s(0),s))
scala> mm
res2: scala.collection.mutable.HashMap[Char,scala.collection.mutable.Set[String]]
with scala.collection.mutable.MultiMap[Char,String] =
Map(a -> Set(alone, away))
scala> mm.entryExists('a',"alone")不幸的是,当您使用集合操作(这只是一个从Char到Set[String]的简单映射)时,多用户性就消失了。
https://stackoverflow.com/questions/6244315
复制相似问题