Scala:找到2个列表之间的区别

时间:2018-05-19 23:37:47

标签: scala

我们说我有两个名单:

var l1 = List(1,0,0) and var l2 = List(0,0,1)

现在,我正在尝试仅使用mapreducefilter函数找到这两个列表之间的差异。此外,当我说差异时,我的意思是我想比较列表中的相同位置。例如,将l1(0)l2(0)l1(1)l2(1)进行比较等进行比较。毕竟比较后,我返回一个数字,表示不同元素之间的数量。两个清单。我该怎么做?

3 个答案:

答案 0 :(得分:1)

正如@Andrey建议简短易行。

l1.zip(l2).count(t2 => t2._1 != t2._2)

答案 1 :(得分:1)

如果允许length

(0 until l1.length).filter { i => l1(i) != l2(i) }.length

如果不是(要真的严格,请将.length替换为.map(_ => 1).reduce(_ + _)):

(0 until l1.length).map { i => if (l1(i) == l2(i)) 0 else 1 }
                   .reduce(_ + _)

后者将在空列表中失败。如果你允许reduceOption

,你可以这样做
(0 until l1.length).map { i => if (l1(i) == l2(i)) 0 else 1 }
                   .reduceOption(_ + _).getOrElse(0)

在任何一种情况下,您可能希望使用Vector而不是List,因为List索引编制速度很慢。当然,zip比索引更具惯用性,甚至可以快速List

答案 2 :(得分:0)

val elem= l1.zip(l2).filter(_.1 != _.2).length

它将达到目的。