Как проверить, находится ли значение в любом месте таблицы Lua? - PullRequest
3 голосов
/ 05 мая 2019

Я довольно новичок в Луа, поэтому, пожалуйста, извините, если этот вопрос слишком простой.Мне было интересно, если есть хороший способ проверить, не находится ли значение в таблице lua.Что-то вроде:

if 5 ~= t[1] or 5 ~= t[2] or 5 ~= t[3] ... then end

, но менее глупо.

Это

for i,v in ipairs(t) do
   if  5 ~= v then
   end
end

на самом деле не работает, потому что я хочу проверить, не появляется ли оно где-нибудь втаблица, а не если она равна какому-либо данному значению.

Возможно, единственное жизнеспособное решение, о котором я мог бы подумать, это что-то вроде

check = 0
for i,v in ipairs(t) do
   if  5 == v then
   check = 1
   end
end

if check == 0 then end

, но оно все еще выглядит довольно громоздким...

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Если вам нужно проверить, существует ли элемент в массиве, вам лучше сохранить хеш-карту для этого массива.Это, очевидно, неэффективно, чтобы пройти весь (или часть) массива для каждой проверки.Я предлагаю вам создать сопоставление и только после этого делать ваши проверки.Пример:

local function array_map(array)
  local map = {}
  for _, item in ipairs(array) do
    map[item] = true
  end
  return map
end

local array = {1,2,3,4,5,6,7}
local arr_map = array_map(array)

if arr_map[1] then 
  print("The array has item 1")
end

if not arr_map[10] then
  print("Item 10 is not part of the array")
end

Таким образом вы получаете свои тесты в постоянное время ϑ(1) + n один раз для построения карты.

2 голосов
/ 05 мая 2019

Если вы хотите узнать, есть ли значение в таблице, вам нужно сравнивать каждое значение таблицы с вашим значением, пока не найдете первое совпадение.

for k,v in pairs(myTable) do
  if v == searchValue then
    print("Found one!")
    break
  end
end

Имейте в виду, что ipairs работает только для таблиц с последовательными индексами 1-n. Если вы хотите проверить какие-либо элементы таблицы, используйте pairs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...