Luaリファレンス 要注意点 ~ハッシュ~

文字インデックス(フル記法版)

  • 文字が予約語や記号等を含む場合は、配列番号指定と同じように[]を付けた上で、 文字列を指定すれば良い。
    abc = {
        ["while"] = 1, ["f(x)"] = 2}
    }
    print(abc["f(x)"])
    

文字インデックス(シンタックスシュガー版)

  • テーブルコンストラクタ内ではシンタックスシュガーを使うことが出来る
    abc = {
        black = 1, white = 2
    }
    print(abc.black)
    

バッグの例

  • バッグとは、要素の数も含めて要素内容を保持するもの
    bag = {} -- 名前空間
    
    -- テーブルに要素を加えたら、その項目をインクリメント
    function bag.insert (tbl, element)
       tbl[element] = (tbl[element] or 0) + 1
    end
    
    -- テーブルから要素を削除したら、デクリメント。0になるなら、nilにして消す
    function bag.remove (tbl, element)
       local count = tbl[element]
       tbl[element] = (count and count > 1) and count -1 or nil
    end
    

セットの例

  • セットとは(数学の)理論集合として取り扱えるもの
    Set = {}
       
    function Set.new (tbl)
        local set = {}
        for _, v in ipairs(tbl) do set[v] = true end
        return set
    end
    
    function Set.union(a, b)
        local res = Set.new{}
        for k in pairs(a) do res[k] = true end
        for k in pairs(b) do res[k] = true end
        return res
    end
    
    function Set.intersection(a, b)
        local res = Set.new{}
        for k in pairs(a) do
             res[k] = b[k]               -- nilであれば、LUAでは該当のキーごと消えるからだ。
        end
        return res
    end
    
    function Set.tostring(set)
        local l = {}
        for e in pairs(set) do
             l[#l + 1] = e
        end
        return "{" .. table.concat(l, ", ") .. "}"
    end
    
    function Set.print(s)
        print(Set.tostring(s))
    end
    
    

トップ   差分 履歴 リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-23 (土) 00:00:00