配列の場合は、table.find() という関数を使用することで、要素を検索することができましたが、辞書の場合はその機能に相当する関数がありません。そのため、for ループを使用して1つ1つ値を確認して探します。
例として、どの部屋にペットがいるのかを調べるようなものを作成します。house という名前の辞書から、指定した値に対応するキーを見つけるということになります。
- 辞書をコピーします。
local house = {
kitchen = "pile of Junk",
livingRoom = "kitten",
bedroom1 = "nobody there",
bedroom2 = "puppy",
}
- 辞書を検索するための findPet() という新しい関数を作成します。
- 辞書を for ループで使用する場合は pairs() を使用します。
- if 文で値が searchFor かどうかを確認します。見つかった場合は、そのキーを返します。見つからなかった場合は nil を返します。
local function findPet(whereToSearch, searchFor)
for place, value in pairs(whereToSearch) do
if value == searchFor then
return place
end
end
return nil
end
- findPet を使用してみましょう。検索する辞書と、検索したい値を引数として渡すだけです。見つかった場合は、そのキーを返します。
local place = findPet(house,"puppy")
print(place)
bedroom2 と表示されるはずです。
ちなみに、bedroom2 キーの値を取得する場合は、
print( house.bedroom2 ) もしくは
print( house[“bedroom2”] ) のように記述します。