我很难理解为什么这段代码看起来早就终止了:
item
它返回object intersectionDemo {
val arr = Array(2, 4, 7, 8, 12, 20)
val arr2 = Array(3, 4, 8, 9, 11, 20)
Iterator.iterate((arr, arr2, List[Int]())) {
case (one, two, res) =>
if (one.head == two.head)
(one.tail, two.tail, one.head :: res)
else if (one.head > two.head)
(one, two.tail, res)
else
(one.tail, two, res)
}.takeWhile { case (a, b, _) => a.nonEmpty && b.nonEmpty }
.toList.last._3.reverse
}
,尽管它应该返回List(4, 8)
,如果我在这里检查第一个或第二个数组:List(4, 8, 20)
或_._1
,我得到_._2
。我确实知道还有其他方法可以解决两个数组的交集问题,但对于为什么不插入最后一个元素,我有点困惑。
我的猜测是,它看到Array(20)
和one.tail
是two.tail
并终止了迭代,但是empty
是否不应该插入?
答案 0 :(得分:3)
考虑一下。 (我正在使用<a href="/?action=edit&id=<?php echo $row['id'] ?>">EDIT <?php echo $row['first_name'].' '.$row['last_name'] ?></a>
语法来演示List
的状态,但是您明白了。)
Array
// 20::Nil 20::Nil (Nil, Nil, 20 :: 8 :: 4 :: Nil)
if (one.head == two.head) (one.tail, two.tail, one.head :: res)
被插入 20
和one
都被清空,因此,如果您two
都不为空,则说明尚未插入
如果将其更改为takeWhile
,则会得到所需的结果。