【发布时间】:2015-08-28 12:40:37
【问题描述】:
我有两个列表
val l1 = 列表(1,2,3)
val l2 = List(1,3,3)
与
l1.diff(l2)
我可以在列表中找到不同之处;同时,我也对发现差异的索引感兴趣;我能知道 scala 中的解决方案是什么吗?
注意:两个列表大小始终相同。
【问题讨论】:
-
我提出了关闭请求,因为不清楚他想要达到什么目的。
我有两个列表
val l1 = 列表(1,2,3)
val l2 = List(1,3,3)
与
l1.diff(l2)
我可以在列表中找到不同之处;同时,我也对发现差异的索引感兴趣;我能知道 scala 中的解决方案是什么吗?
注意:两个列表大小始终相同。
【问题讨论】:
您可以将索引添加到列表和差异然后:
val diff = l1.zipWithIndex.diff(l2.zipWithIndex)
-> List((2,1)) // different value is 2 and index is 1
【讨论】:
val indexes = (l1 zip l2 zipWithIndex).filter(x => x._1._1 != x._1._2).map(_._2)
val indexesWithDiffValues = (l1 zip l2 zipWithIndex).filter(x => x._1._1 != x._1._2)
此代码将为您提供所需的索引列表。
【讨论】:
另一种方法可以很容易地向您显示哪个列表以及您可以在哪里找到值:
l1.diff(l2).map(v => (v, l1.indexOf(v), l2.indexOf(v)))
// res6: List[(Int, Int, Int)] = List((2,1,-1))
【讨论】:
val l1 = List(1,2,3,1);val l2 = List(1,3,3, 2);l1.diff(l2).map(v => (v, l1.indexOf(v), l2.indexOf(v))) 给出List((1,0,0))