Hirofumi Fujii Start Page

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 が返っている。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-10-13 (火) 18:13:51