開源技術教學文件網 建立和使用映射 (Map)

最後修改日期為 FEB 28, 2019

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

同樣地,這裡使用到一些高階函式的概念,一開始覺得太難可暫時跳過。

分享本文
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Yahoo
追蹤本站
Facebook Facebook Twitter