bells
安裝本網站至主畫面:

[Nim] 語言程式教學:表 (Table)

PUBLISHED ON FEB 28, 2018 — PROGRAMMING
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    表 (table) 是一種非線性的容器,儲存 (鍵, 值) 對 (key-value pair);Table 透過雜湊函式做為索引,可雜湊化的 (hashable) 型別即可做為鍵,而值沒有特別限定型別。大部分內建型別都實作好相關的雜湊函式,程式設計者不需重新實作;對於自行建立的類別,則需自行實作雜湊函式。

    註:Table 有些書籍翻成表,本文從善如流;表相當於雜湊 (hash)、字典 (dictionary)、關連式陣列 (associative array) 等。

    建立表

    在 Nim 中,透過呼叫 tables 模組使用表。我們可以直接使用實字建立表:

    import tables
    
    var hash = {"one": "eins", "two": "zwei", "three": "drei"}.toTable
    assert(hash["one"] == "eins")
    

    或是用 initTable 建立空表:

    import tables
    
    var hash = initTable[string, string]()
    
    hash["one"] = "eins"
    hash["two"] = "zwei"
    hash["three"] = "drei"
    
    assert(hash["one"] == "eins")
    

    除了用字串外,其他的型別也可以當成表的鍵,只要該類型符合 hashable 即可。

    檢索表

    使用鍵做為索引來得到值:

    import tables
    
    var hash = initTable[string, string]()
    
    hash["one"] = "eins"
    hash["two"] = "zwei"
    hash["three"] = "drei"
    
    assert(hash.hasKey("two"))
    assert(hash.hasKey("four") == false)
    

    由於雜湊函式是單向的,無法由值回推鍵,需注意。

    走訪表

    可藉由表的鍵來走訪表:

    import tables
    
    var hash = initTable[string, string]()
    
    hash["one"] = "eins"
    hash["two"] = "zwei"
    hash["three"] = "drei"
    
    for k in hash.keys:
      echo k
    

    也可藉由表的值來走訪表:

    import tables
    
    var hash = initTable[string, string]()
    
    hash["one"] = "eins"
    hash["two"] = "zwei"
    hash["three"] = "drei"
    
    for v in hash.values:
      echo v
    

    也可同時取出鍵、值對:

    import tables
    
    var hash = initTable[string, string]()
    
    hash["one"] = "eins"
    hash["two"] = "zwei"
    hash["three"] = "drei"
    
    for k, v in hash.pairs:
      echo k & ": " & v
    

    刪除表中的元素

    使用 del 方法可刪除鍵、值對,使用方式為刪除特定的鍵,該鍵、值對會一併去除,實例如下:

    import tables
    
    var hash = initTable[string, string]()
    
    hash["one"] = "eins"
    hash["two"] = "zwei"
    hash["three"] = "drei"
    assert(hash.hasKey("one"))
    
    hash.del("one")
    assert(hash.hasKey("one") == false)
    

    建立有序的表

    一般的表是無序的,若需要保存插入鍵、值對的順序可改用 ordered table:

    import tables
    
    var hash = initOrderedTable[string, string]()
    
    hash["one"] = "eins"
    hash["two"] = "zwei"
    hash["three"] = "drei"
    
    for k, v in hash.pairs:
      echo k & ": " & v
    

    但 ordered table 效能會略差於一般的表,使用者需依使用情境自行考量。

    你或許對以下產品有興趣
    Xmas tree