Scala 如何使用功能性样式合并两个不同的集合?

Scala 如何使用功能性样式合并两个不同的集合?,scala,list,collections,functional-programming,Scala,List,Collections,Functional Programming,我有两个收藏: val one = Seq(("1", 123), ("3", 555), ("2", 31)) val two = Seq("1", "4", "2") 我需要将第二个seq附加到第一个seq(顺序无关紧要),例如: val result = Seq(("1", 123), ("2", 31), ("3", 555), ("4", 0)) //0 - constant 我可以通过转换到集合和使用包含检查进行迭代来实现,但这非常难看。如何用正确的“功能性”风格实现这一点?我

我有两个收藏:

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

val two = Seq("1", "4", "2")
我需要将第二个seq附加到第一个seq(顺序无关紧要),例如:

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

我可以通过转换到集合和使用包含检查进行迭代来实现,但这非常难看。如何用正确的“功能性”风格实现这一点?

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

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

首先,
two
集合中的所有值将与值0相加。将添加
one
集合,这将覆盖
映射中键相同的值。在此之后,您只需将
映射
转换为
Seq
,即可得到所需的结果。

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

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

首先,
two
集合中的所有值将与值0相加。将添加
one
集合,这将覆盖
映射中键相同的值。在此之后,您只需将
映射
转换为
序列
,即可得到所需的结果。

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

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`

++
操作基本上合并两个不同的
序列
,并返回结果

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

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

我不明白在上面的示例中如何连接序列。请提供更多细节。我不明白在上面的例子中你是如何连接序列的。请提供更多详细信息。对于
two
中的每个元素,这没有
one.map(u.\u 1)
(创建新的
Seq
)。表现不太好,你说得对。我正在根据您的评论编辑我的解决方案。谢谢。这为
two
的每个元素创建了
one.map(u.\u 1)
(创建一个新的
Seq
)。表现不太好,你说得对。我正在根据您的评论编辑我的解决方案。谢谢