scala使用zip合併兩個集合為二元組集合

2021-08-04 16:55:38 字數 1803 閱讀 8695

tuple只能有tuple2到tuple22

problem

你想要合併兩個有序集合成為乙個鍵值對集合

solution

使用zip方法合併兩個集合:

scala> val women = list

("wilma"

, "betty"

)women: list

[string] = list

(wilma, betty)

scala> val men = list

("fred"

, "barney"

)men: list

[string] = list

(fred, barney)

scala> val couples = women zip men

couples: list

[(string, string)] = list

((wilma,fred), (betty,barney))

上面建立了乙個二元祖集合,它把兩個原始集合合併為乙個集合。下面我們來看下如何對zip的結果進行遍歷:

scala> for

((wife,husband) <- couples)

wilma is

merried to fred

betty is

merried to barney

一旦你遇到類似於couples這樣的二元祖集合,你可以把它轉化為乙個map,這樣看起來更方便:

scala> val couplesmap = couples.tomap

couplesmap: scala.collection.immutable.map[string

,string

] = map(wilma -> fred, betty -> barney)

discussion

如果乙個集合包含比另乙個集合更多的元素,那麼當使用zip合併集合的時候,擁有更多元素的集合中多餘的元素會被丟掉。如果乙個集合只包含乙個元素,那麼結果二元祖集合就只有乙個元素。

scala> val products = array

("breadsticks"

, "pizza"

, "soft drink"

)products: array

[string

] = array

(breadsticks, pizza, soft drink)

scala> val prices = array(4)

prices: array

[int] = array(4)

scala> val productswithprice = products.zip(prices)

productswithprice: array

[(string

, int)] = array

((breadsticks,4

))

注意:我們使用unzip方法可以對zip後的結果反向操作:

scala> val (a,b) = productswithprice.unzip

a: scala.collection.mutable.indexedseq[string]

= arraybuffer(breadsticks)

b: scala.collection.mutable.indexedseq[int]

= arraybuffer(4

)

Scala 合併兩個Map

把scala的兩個map合併,合併的時候會遇到相同的鍵和不同的鍵,scala val m1 map 1 10,2 4 m1 scala.collection.immutable.map int,int map 1 10,2 4 scala val m2 map 2 5,4 8 m2 scala.co...

Scala 之 合併兩個map

開發中遇到需求 合併兩個map集合物件 將兩個對應key的值累加 先說解決方案 map1 map2 這特麼什麼鬼 首先 scala中現有的合併集合操作不能滿足這個需求 注意合併後的結果a的g02的值其實是被覆蓋掉了。然後 說說那個表示式中 a b 這部分是什麼鬼。這個其實是scala簡化的foldl...

合併兩個byte

byte sshead system.text.encoding.unicode.getbytes this is head byte sscontent system.text.encoding.unicode.getbytes this is content.sshead sscontent b...