加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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保留元素的顺序。
> Set不包含重复元素。
> Map包含从键到值的映射。

在scala中列出是linked list,所以你应该添加元素,而不是附加。参见Performance Characteristics的scala系列。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读