*Luaリファレンス 要注意点 ~ハッシュ~ [#hd03b5a4]

**文字インデックス(フル記法版) [#o7ecfac4]
-文字が予約語や記号等を含む場合は、配列番号指定と同じように[]を付けた上で、
文字列を指定すれば良い。
#sh(lua){{
abc = {
    ["while"] = 1, ["f(x)"] = 2}
}
print(abc["f(x)"])
}}
~

**文字インデックス(シンタックスシュガー版) [#m8b57fb4]
-テーブルコンストラクタ内ではシンタックスシュガーを使うことが出来る
#sh(lua){{
abc = {
    black = 1, white = 2
}
print(abc.black)
}}


**バッグの例 [#x5113b74]
-バッグとは、要素の数も含めて要素内容を保持するもの
#sh(lua){{
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
}}


**セットの例 [#s9c2d101]
-セットとは(数学の)理論集合として取り扱えるもの
#sh(lua){{
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