我们说我有两个名单:
var l1 = List(1,0,0) and var l2 = List(0,0,1)
现在,我正在尝试仅使用map
,reduce
和filter
函数找到这两个列表之间的差异。此外,当我说差异时,我的意思是我想比较列表中的相同位置。例如,将l1(0)
与l2(0)
,l1(1)
与l2(1)
进行比较等进行比较。毕竟比较后,我返回一个数字,表示不同元素之间的数量。两个清单。我该怎么做?
答案 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
它将达到目的。