Scala for循环遍历两个列表

时间:2013-06-19 19:18:24

标签: scala scala-collections

我有一个List[Message]和一个List[Author]具有相同数量的项目,应该进行排序,以便在每个索引处,Message来自Author

我还有一个课程,我们在这里调用SmartMessage,构造函数带有两个参数:Message和相应的Author

我想要做的是创建一个List[SmartMessage],结合两个简单列表的数据。

额外问题:List是否保留了Scala中的广告订单?只是为了确保我创建List[Message]List[Author]具有相同的排序。

1 个答案:

答案 0 :(得分:64)

您可以使用zip

val ms: List[Message] = ???
val as: List[Author] = ???

var sms = for ( (m, a) <- (ms zip as)) yield new SmartMessage(m, a)

如果您不喜欢for-comprehensions,可以使用map

var sms = (ms zip as).map{ case (m, a) => new SmartMessage(m, a)}

方法zip创建对的集合。在这种情况下List[(Message, Author)]

您还可以在zipped(以及Tuple2)上使用Tuple3方法:

var sms = (ms, as).zipped.map{ (m, a) => new SmartMessage(m, a)}

正如您所看到的,在这种情况下,map中不需要模式匹配。

<强>附加

List SeqSeq保留订单。请参阅scala collections overview

收藏品有3个主要分支:SeqSetMap

  • Seq保留元素的顺序。
  • Set不包含重复元素。
  • Map包含从键到值的映射。
scala中的

Listlinked list,因此您应该为其添加元素,而不是追加元素。请参阅scala集合的Performance Characteristics