0
我有如下值的列表:與現有列表創建新地圖
[ 「HTC Magic的」: 「Tetris.apk」, 「摩托羅拉Droid里程碑」: 「TheSims3.apk」, 「Acer C6」:「TheSims3.apk」];
我想這個列表轉換成地圖,它看起來像
[Tetris.apk:HTC魔術],TheSims3.apk:摩托羅拉Droid里程碑,宏碁 C6]
我有如下值的列表:與現有列表創建新地圖
[ 「HTC Magic的」: 「Tetris.apk」, 「摩托羅拉Droid里程碑」: 「TheSims3.apk」, 「Acer C6」:「TheSims3.apk」];
我想這個列表轉換成地圖,它看起來像
[Tetris.apk:HTC魔術],TheSims3.apk:摩托羅拉Droid里程碑,宏碁 C6]
mapIn = ["HTC Magic":"Tetris.apk", "Motorola Droid Milestone":"TheSims3.apk", "Acer C6":"TheSims3.apk"]
mapOut = [:].withDefault { [] }
mapIn.each { k, v -> mapOut[v] << k }
mapOut
> [Tetris.apk:[HTC Magic], TheSims3.apk:[Motorola Droid Milestone, Acer C6]]
如果你不介意的格局虐待,你可以使用inject
:
mapOut = mapIn.inject([:].withDefault {[]}) { m, k, v -> m[v] << k; m }
> [Tetris.apk:[HTC Magic], TheSims3.apk:[Motorola Droid Milestone, Acer C6]]
如果你不介意的話,你怎麼弄的價值觀了,你可以使用groupEntriesBy
:
mapOut = mapIn.groupBy { it.value }
mapOut["TheSims3.apk"]*.key
> [Motorola Droid Milestone, Acer C6]
這不是第一件事情的地圖嗎? – 2011-12-30 17:44:00
對於遲到的回覆感到抱歉,假期後回來工作...將檢查您的解決方案,並會盡快更新,謝謝你的迴應 – Techie 2012-01-03 10:15:29