前言
Groovy 的映射 (map) 等同於其他程式的雜湊 (hash)、字典 (dictionary)、關連式陣列 (associative array) 等,是以鍵/值對組成的非線性容器。本文介紹映射的用法。
建立映射
以下範例建立映射 (map) 實字並存取其元素:
def m = [one:"eins", two:"zwei", three:"drei"]
assert m.size() == 3
assert m["two"] == "zwei"
assert m.containsKey("four") == false
也可以先建立一個空的映射後再逐一加入鍵/值對:
def m = [:]
m["one"] = "eins"
m["two"] = "zwei"
m["three"] = "drei"
assert m.size() == 3
assert m["two"] == "zwei"
assert m.containsKey("four") == false
走訪映射
以下範例展示數種走訪映射的方式:
def m = [one:"eins", two:"zwei", three:"drei"]
// Iterate over keys
m.keySet().each { println it }
// Iterate over values
m.values().each { println it }
// Iterate over (k, v) pairs
m.each { k, v -> println "$k -> $v" }
// Iterate over entries, which contain (k, v) pairs
m.each { entry ->
println "${entry.key} -> ${entry.value}"
}
我們可以由以下方式來走訪:
- 鍵
keySet
- 值
values
- 鍵/值對
each
- 帶有鍵/值對的物件,像是本例的
entry
操作映射
Groovy 也提供一些操作映射的方法 (method),參考範例如下:
def m = [a:1, b:2, c:3]
// Select fitted entries.
sm = m.findAll { entry -> entry.value < 3 }
assert sm.size() == 2
assert sm.a == 1
// Create a new map from (k, v) pairs.
cm = m.collectEntries{ k, v -> [k, v ** 2] }
assert cm.size() == 3
assert cm.c == 9
同樣地,這裡使用到一些高階函式的概念,一開始覺得太難可暫時跳過。