如何将两个不同的集合与功能样式合并?

问题描述 投票:1回答:2

我有两个集合:

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

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

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

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

我可以通过包含check来转换为set和iteration,但它非常难看。如何以正确的“功能”风格实现这一点?

scala list collections functional-programming
2个回答
1
投票

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

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并返回结果


5
投票

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

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

首先,two集合中的所有值都将添加值0.将添加one集合,这将覆盖密钥相同的Map中的值。在此之后,您可以简单地将Map转换为Seq,从而获得所需的结果。

© www.soinside.com 2019 - 2024. All rights reserved.