Scala同时循环两个列表
发布时间:2020-12-16 09:30:45 所属栏目:安全 来源:网络整理
导读:我有一个列表[消息]和一个列表[作者],它们具有相同的项目数量,并且应该被排序,使得在每个索引处,消息来自作者。 我也有类,我们将在这里调用SmartMessage,一个构造函数接受2个参数:一个消息和相应的作者。 我想做的是创建一个列表[SmartMessage],结合
我有一个列表[消息]和一个列表[作者],它们具有相同的项目数量,并且应该被排序,使得在每个索引处,消息来自作者。
我也有类,我们将在这里调用SmartMessage,一个构造函数接受2个参数:一个消息和相应的作者。 我想做的是创建一个列表[SmartMessage],结合2个简单列表的数据。 额外的问题:列表是否保留Scala中的插入顺序?只是为了确保我创建列表[消息]和列表[作者]同样的顺序。 解决方法
你可以使用zip:
val ms: List[Message] = ??? val as: List[Author] = ??? var sms = for ( (m,a) <- (ms zip as)) yield new SmartMessage(m,a) 如果你不喜欢理解,你可以使用地图: var sms = (ms zip as).map{ case (m,a) => new SmartMessage(m,a)} 方法zip创建对的集合。在这种情况下List [(Message,Author)]。 您也可以使用Tuple2(和Tuple3)上的压缩方法: var sms = (ms,as).zipped.map{ (m,a)} 在这种情况下,您可以看到在地图中不需要模式匹配。 额外 列表是Seq和Seq保留订单。见scala collections overview。 集合有3个主要分支:Seq,Set和Map。 > Seq保留元素的顺序。 在scala中列出是linked list,所以你应该添加元素,而不是附加。参见Performance Characteristics的scala系列。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |