[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

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

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤新文章】
    Facebook Twitter Plurk
    標籤: GROOVY, JAVA