美思 [Groovy] 程式設計教學:建立和使用映射 (Map)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

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

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

關於作者

身為資訊領域碩士,美思認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

美思喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,美思將所學寫成文章,放在這個網站上和大家分享。