繁体   English   中英

如何合并具有功能样式的两个不同的集合?

[英]How to merge two different collections with functional style?

我有两个收藏:

val one = Seq(("1", 123), ("3", 555), ("2", 31))

val two = Seq("1", "4", "2")

我需要将第二个序列附加到第一个(顺序无关紧要),例如:

val result = Seq(("1", 123), ("2", 31), ("3", 555), ("4", 0)) //0 - constant

我可以通过包含设置的转换来转换为set和迭代,但这非常丑陋。 如何以正确的“功能”风格实现这一目标?

我不确定什么是正确的“功能”风格。 但是,您可以使用Map轻松将这两个集合附加在一起。

val result = (two.map((_,0)).toMap ++ one).toSeq

首先, two集合中的所有值都将添加一个值0。 one集合将被添加,这将覆盖键相同的Map中的值。 之后,您只需将Map转换为Seq ,即可获得所需的结果。

有几种可能的方法。 其中之一是:

val oneKeys = one.map(_._1)
val result = one ++ two.filterNot(x => oneKeys.contains(x)).map(x => (x,0))

扩展方法:

val oneKeys = one.map(_._1) //gets the keys of each tuple from list `one`
two.filterNot(x => oneKeys.contains(x))  //selects the keys that list `one` does not contain
   .map(x => (x,0))                            //converts them into tuples by adding value `0`

++操作基本上合并了两个不同的Seq并返回结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM