40

我有 aList[Message]和 aList[Author]具有相同数量的项目,并且应该排序,以便在每个索引处,Message来自Author.

我还有一个我们将在这里调用的类,SmartMessage构造函数带有 2 个参数:aMessage和对应的Author.

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

额外的问题:List在 Scala 中保留插入顺序吗?只是为了确保我创建List[Message]和 aList[Author]具有相同的顺序。

4

1 回答 1

83

你可以使用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方法:Tuple2Tuple3

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

map如您所见,在这种情况下您不需要模式匹配。

额外的

ListSeqSeq保持秩序。请参阅scala 集合概述

集合有 3 个主要分支:SeqSetMap

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

List在 scala 中是链表,所以你应该在它前面加上元素,而不是追加。请参阅Scala 集合的性能特征

于 2013-06-19T19:21:13.300 回答