Scala 之 合併兩個map

2021-08-08 18:20:17 字數 1341 閱讀 9728

**:

開發中遇到需求:合併兩個map集合物件(將兩個對應key的值累加)

先說解決方案:

( map1 /: map2 )
這特麼什麼鬼  (╯‵□′)╯""┻━┻☆))>○

首先:

scala中現有的合併集合操作不能滿足這個需求 。

注意合併後的結果a的g02的值其實是被覆蓋掉了。。

然後:

說說那個表示式中(a /: b)( ... ) 這部分是什麼鬼。這個其實是scala簡化的foldleft函式。

先看foldleft

list(1,2,3).foldleft(0)((sum,i)=>sum+i)  // 紅色部分是初始值,藍色部分是操作函式

list(1,2,3).foldleft(0)((sum,i)=>sum+i)

可以寫成

(list(1,2,3) foldleft 0)((sum,i)=>sum+i)

語法糖(0 /: list(1,2,3))(_+_)

操作符設計者的腦洞也是夠了 - - 開發者絕對是表情帝

如果接受了這個設定。。。foldright也可以腦補出來。。 一定是  ((1 to 5):\100)((i,sum)=> sum-i) .......

另外。乙個例子說明  foldleft 和 foldright:

最後:

來說說操作函式中的case  ,這個鬼叫模式匹配 (哦對,模式匹配的時候是要有個大括號包起來的所以最終結果的操作函式使用大括號包著。)

map的摺疊函式是依次傳入map的鍵值對。所以操作函式希望傳入的運算元可以是(k,v)形式。。於是用case表示式:(map, (k,v))

具體模式匹配是什麼。。簡單說就是scala會嘗試將傳入的值匹配到case後面表示式的樣子(當然這裡一定會匹配上,所以沒有寫case的多餘分支)具體什麼是「模式匹配」,目前理解尚淺此處暫不深入妄加揣測。

壹 try 勝千言 :

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...

合併兩個byte

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

合併兩個DataTable

方法1 sqlconnection myconnection new sqlconnection server localhost uid sa pwd database wjoa string sql1 select from resoursemanage t sqldataadapter ada...