我有一个List[Message]
和一个List[Author]
具有相同数量的项目,应该进行排序,以便在每个索引处,Message
来自Author
我还有一个课程,我们在这里调用SmartMessage
,构造函数带有两个参数:Message
和相应的Author
。
我想要做的是创建一个List[SmartMessage]
,结合两个简单列表的数据。
额外问题:List
是否保留了Scala中的广告订单?只是为了确保我创建List[Message]
和List[Author]
具有相同的排序。
答案 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
Seq
,Seq
保留订单。请参阅scala collections overview。
List
为linked list,因此您应该为其添加元素,而不是追加元素。请参阅scala集合的Performance Characteristics。