【问题标题】:Looping through a LinkedHashSet using indexes in Scala使用 Scala 中的索引遍历 LinkedHashSet
【发布时间】:2015-04-02 00:37:42
【问题描述】:
我有一个从 Seq 创建的 LinkedHashSet。我使用了 LinkedHashSet,因为我需要保持 Seq 的顺序,同时还要确保唯一性,就像 Set 一样。我需要对照另一个序列检查这个 LinkedHashSet,以验证其中的各种属性是否相同。我假设我可以使用索引i 进行循环,但似乎不行。这是我想要完成的一个示例。
var s: Seq[Int] = { 1 to mySeq.size }
return s.forall { i =>
myLHS.indexOf(i).something == mySeq.indexOf(i).something &&
myLHS.indexOf(i).somethingelse == mySeq.indexOf(i).somethingelse
}
那么我如何访问 LHS 的各个元素?
【问题讨论】:
标签:
scala
indexof
linkedhashset
【解决方案1】:
考虑在集合上使用 zip 方法来创建对(元组)的集合。这个的具体情况取决于你的具体情况。您可能想做mySeq.zip(myLHS) 或myLHS.zip(mySeq),这将创建不同的结构。你可能想要mySeq.zip(myLHS),但我猜。此外,如果集合非常大,您可能需要先查看,例如mySeq.view.zip(myLHS) 这样对集合也是非严格的。
一旦你有了这个组合集合,你就可以使用 for-comprehension(或直接,myZip.foreach)来遍历它。
【解决方案2】:
在这种情况下不需要 LinkedHashSet。因为我是从 Seq 制作的,所以它已经被订购了。我不必将其转换为 LHS 以使其独一无二。显然,Seq 有 distinct 方法,可以从序列中删除重复项。从那里,我可以通过它们的索引访问这些项目。