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
)。表现不太好,你说得对。我正在根据您的评论编辑我的解决方案。谢谢