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

时间:2017-09-22 07:24:40

标签: scala list collections functional-programming

我有两个系列:

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和iteration,但它非常难看。如何用正确的"功能"来实现这一点。风格?

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

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

<div class="col-xs-1">
   <img id="img" width="60px" src="images/a1.png" class="img-rounded" />
</div>
<div class="col-xs-2">
   <br/>
   <br/>
   <button id="upper" type="button" class="btn btn-primary beaker">IP > Ksp</button>
   <br/>
   <br/>
   <br/>
   <br/>
   <br/>
   <br/>
   <br/> 
   <br/>
   <button id="middle" type="button" class="btn btn-primary beaker">IP = Ksp</button>
   <br/>
   <br/>
   <br/> 
   <br/>
   <br/>
   <br/>
   <br/> 
   <br/>
   <button id="reset" type="button" class="btn btn-primary beaker">IP < Ksp</button>
</div>

扩展方法:

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` 操作基本上合并了两个不同的++并返回结果