いくつかの値(int)を持つこの配列があり、ユーザーが指定した値がその文字列の値と等しいかどうかを確認したいと思います。そうであれば、「Got your string」のようなメッセージを出力します。
リストの例:
local op = {
{19},
{18},
{17}
}
if 13 == (the values from that array) then
message
else
other message
これをどのように行うことができますか?
Luaには他の言語のような厳密な配列はありません-ハッシュテーブルのみがあります。 Luaのテーブルは、インデックスが数値で密集していて隙間がない場合、array-likeと見なされます。次の表のインデックスは1, 2, 3, 4
になります。
local t = {'a', 'b', 'c', 'd'}
配列のようなテーブルがある場合、テーブルをloopingで特定の値が含まれているかどうかを確認できます。 for..in
ループと ipairs
関数を使用して、汎用関数を作成できます。
local function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
end
end
return false
end
if
条件で上記を使用して結果を取得できます。
if has_value(arr, 'b') then
print 'Yep'
else
print 'Nope'
end
上記のコメントを繰り返しますが、現在のコード例は配列のような数字の表ではありません。代わりに、配列のようなテーブルを含む配列のようなテーブルで、最初のインデックスのそれぞれに番号があります。上記の関数を変更して、表示されているコードを操作し、汎用性を低くする必要があります。
local function has_value (tab, val)
for index, value in ipairs(tab) do
-- We grab the first index of our sub-table instead
if value[1] == val then
return true
end
end
return false
end
Luaはそれほど大きくない複雑な言語ではなく、その構文は非常に明確です。上記の概念がまったく異質な場合は、例をコピーするだけでなく、実際の文献を読むのに時間をかける必要があります。 Luaでのプログラミング を読んで、非常に基本的なことを確実に理解することをお勧めします。これはLua 5.1を対象とした初版です。
また、値をインデックスに移動し、それらに真の値を割り当てることで、配列に値が存在するかどうかのチェックをより効率的にすることもできます。
次に、テーブルをチェックするときに、そのインデックスに値が存在するかどうかをチェックするだけです。最悪の場合はテーブル全体を調べる必要がないため、時間を節約できます...
ここに私が念頭に置いていた例があります:
local op = {
[19]=true,
[18]=true,
[17]=true
}
if op[19] == true then
print("message")
else
print("other message")
end
質問のop
テーブルは、実際には配列の配列(テーブル)です。
テーブルに値が存在するかどうかを確認するには:
local function contains(table, val)
for i=1,#table do
if table[i] == val then
return true
end
end
return false
end
local table = {1, 2, 3}
if contains(table, 3) then
print("Value found")
end