lua を使ってみた 2 日本語連想配列 †lua の配列はもともと連想配列なので、今更、連想配列を問題にする必要はないのだが、 日本語文字列を key にする方法を調べてみた。 日本語文字列を key にしてみる †lua はもともと 8bit clean なので、 8bit 目が on であるバイトは問題無いが、多バイト文字でその一部に ASCII の 記号と一致するところがあると、おかしなことになる。 しかし、これも "lua を使ってみた" で述べた [[ ]] 記法を使って問題を容易に避ける ことができる。 例を示そう -- test1.lua tbl = {[ [[長男]] ]=[[太郎]], [ [[次男]] ]=[[次郎]], [ [[三男]] ]=[[三郎]]} for key, val in pairs(tbl) do print(key, val) end これを実行すれば、 C:\lua>lua test1.lua 次男 次郎 長男 太郎 三男 三郎 C:\lua> となる(格納後どのような順に並んでいるかは不定。連想配列なので、順序は問題 ない。必要なら sort も可能)。 ついでに key入力による値表示も †上の例題だけだと、何となく心もとないので、key を入力して対応する値を 表示する program も作って実行してみる。 -- test2.lua tbl = {[ [[長男]] ]=[[太郎]], [ [[次男]] ]=[[次郎]], [ [[三男]] ]=[[三郎]]} key = io.read() while key do print(tbl[key]) key = io.read() end io.read() は io.input():read() の省略形であり、text mode で改行までの 文字列を返す(改行コードは含まない)。 また EOF では nil を返すので、Windows の場合は CTRL-Z で終了する。実行結果を示す。* 印のついた行が入力行である。 C:\lua>lua test2.lua * 三男 三郎 * 長男 太郎 * 五男 nil * 次男 次郎 * ^Z C:\lua> ここで作った連想配列には "五男" という key は無いので、 "五男" という入力に対しては nil が返っている。 |