Ищите объект в списке Lua

Не совсем ответ, но я решил одну проблему только для моего случая (загрузка исходного кода Python).

Как мне заставить open работать?

Оказалось, что кодирование строк недоступно, поэтому я использовал rb вместо r. Затем я передаю bytes в compile, он может справиться с ними.

49
задан hjpotter92 23 September 2013 в 09:39
поделиться

4 ответа

Вы могли использовать что-то как набор от Программирование в Lua:

function Set (list)
  local set = {}
  for _, l in ipairs(list) do set[l] = true end
  return set
end

Тогда Вы могли поместить свой список в Набор и протестировать на членство:

local items = Set { "apple", "orange", "pear", "banana" }

if items["orange"] then
  -- do something
end

Или Вы могли выполнить итерации по списку непосредственно:

local items = { "apple", "orange", "pear", "banana" }

for _,v in pairs(items) do
  if v == "orange" then
    -- do something
    break
  end
end
74
ответ дан Panda 7 November 2019 в 11:28
поделиться

Используйте следующее представление вместо этого:

local items = { apple=true, orange=true, pear=true, banana=true }
if items.apple then
    ...
end
26
ответ дан Jon Ericson 7 November 2019 в 11:28
поделиться

Вы видите непосредственно одни из недостатков Lua, имеющего только одну структуру данных---, Вы имеете к самокрутке. Если Вы будете придерживаться Lua, то Вы будете постепенно накапливать библиотеку функций, которые управляют таблицами в способе, которым Вам нравится делать вещи. Моя библиотека включает преобразование списка к набору и ищущую список функцию высшего порядка:

function table.set(t) -- set of list
  local u = { }
  for _, v in ipairs(t) do u[v] = true end
  return u
end

function table.find(f, l) -- find element v of l satisfying f(v)
  for _, v in ipairs(l) do
    if f(v) then
      return v
    end
  end
  return nil
end
17
ответ дан Norman Ramsey 7 November 2019 в 11:28
поделиться

Таблицы Lua являются более тесно аналогами словарей Python, а не списков. Таблица, которую Вы имеете, создает, по существу индексный массив на основе 1 строк. Используйте любой стандартный алгоритм поиска, чтобы узнать, находится ли значение в массиве. Другой подход должен был бы сохранить значения как ключи таблицы вместо этого как показано в реализации набора сообщения Jon Ericson.

3
ответ дан Judge Maygarden 7 November 2019 в 11:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: