Scala会比较两个列表吗?

Scala会比较两个列表吗?,scala,Scala,如果我不想查看列表中的每个元素是否正确地对应于另一个列表中相同索引的元素,我可以使用forall来执行此操作吗?比如说 val p=List(2,4,6) val q=List(1,2,3) p.forall(x=>x==q(x)/2) 我知道x不是q的索引,这就是我面临的问题,有什么办法可以让它起作用吗?你最好的办法可能是使用zip p.zip(q).forall{case (fst, snd) => fst == snd * 2} 处理这种情况最惯用的方法是压缩以下两个列表:

如果我不想查看列表中的每个元素是否正确地对应于另一个列表中相同索引的元素,我可以使用forall来执行此操作吗?比如说

val p=List(2,4,6)
val q=List(1,2,3)
p.forall(x=>x==q(x)/2)

我知道x不是q的索引,这就是我面临的问题,有什么办法可以让它起作用吗?

你最好的办法可能是使用
zip

p.zip(q).forall{case (fst, snd) => fst == snd * 2}

处理这种情况最惯用的方法是压缩以下两个列表:

scala> p.zip(q).forall { case (x, y) => x == y * 2 }
res0: Boolean = true
您还可以使用
zipped
,这在某些情况下会稍微更有效,同时也可以让您更简洁(或者只是模糊):


请注意,如果列表的长度不相同,这两种解决方案都会自动忽略额外的元素,这可能是您想要的长度,也可能不是您想要的长度。

scala collection library中的序列有
对应的
方法,该方法正好满足您的需要:

p.corresponds(q)(_ == _ * 2)
如果
p
q
的长度不同,则返回false

p.corresponds(q)(_ == _ * 2)