5-6 辞書から値を見つける

配列の場合は、table.find() という関数を使用することで、要素を検索することができましたが、辞書の場合はその機能に相当する関数がありません。そのため、for ループを使用して1つ1つ値を確認して探します。

例として、どの部屋にペットがいるのかを調べるようなものを作成します。house という名前の辞書から、指定した値に対応するキーを見つけるということになります。

  1. 辞書をコピーします。
local house = {
    kitchen = "pile of Junk",
    livingRoom = "kitten",
    bedroom1 = "nobody there",
    bedroom2 = "puppy",
}
  1. 辞書を検索するための findPet() という新しい関数を作成します。
  2. 辞書を for ループで使用する場合は pairs() を使用します。
  3. 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
  1. findPet を使用してみましょう。検索する辞書と、検索したい値を引数として渡すだけです。見つかった場合は、そのキーを返します。
local place = findPet(house,"puppy")
print(place)

bedroom2 と表示されるはずです。

ちなみに、bedroom2 キーの値を取得する場合は、

print( house.bedroom2 )  もしくは
print( house[“bedroom2”] )  のように記述します。

コメントを残す