как сделать поиск элементов

leekyrave

Известный
Автор темы
418
228
Версия MoonLoader
.027.0-preview
Есть такая функция
Код:
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

Как сделать финд по буквам,если например ввели в поиск слово например Олег - выдает самые подходящие варианты
 

ImPasha

Software Developer & System Administrator
Друг
1,787
2,148
Есть такая функция
Лучше, чтобы такой функции не было - сомневаюсь, что это правильно.
Пример регистронезависимого поиска по элементам ассоциативного массива:
Lua:
local elements = {'Apple', 'Orange', 'Mango', 'Pineapple'};
local search = 'apple';

for index, value in ipairs(elements) do
    if value:lower():find(search:lower()) then
        print(index, value);
    end
end
 
  • Нравится
Реакции: leekyrave

leekyrave

Известный
Автор темы
418
228
Лучше, чтобы такой функции не было - сомневаюсь, что это правильно.
Пример регистронезависимого поиска по элементам ассоциативного массива:
Lua:
local elements = {'Apple', 'Orange', 'Mango', 'Pineapple'};
local search = 'apple';

for index, value in ipairs(elements) do
    if value:lower():find(search:lower()) then
        print(index, value);
    end
end
да,спасибо. я сделал примерно так-же,только использовал другой тип массива и pairs

Lua:
local gpsitems = {


  [1] = {
    buttonname = u8"/gps > Важные места",
    answer = u8"/gps > Важные места"
  },


  [2] = {
    buttonname = u8"/gps > Важные места > [LS] Мэрия",
    answer = u8"/gps > Важные места > [LS] Мэрия"
  },
}

-- ondrawframe
imgui.InputText(u8'###POISKGPS',imguifindgps)
for k,v in pairs(gpsitems) do
    if v.buttonname:find(imguifindgps.v) then
       if imgui.Button(v.buttonname,btn_size) then answer(u8:decode(v.answer)) gps_state.v = false end
    end
  end


На сколько такой способ правилен?
 

ImPasha

Software Developer & System Administrator
Друг
1,787
2,148
да,спасибо. я сделал примерно так-же,только использовал другой тип массива и pairs

Lua:
local gpsitems = {


  [1] = {
    buttonname = u8"/gps > Важные места",
    answer = u8"/gps > Важные места"
  },


  [2] = {
    buttonname = u8"/gps > Важные места > [LS] Мэрия",
    answer = u8"/gps > Важные места > [LS] Мэрия"
  },
}

-- ondrawframe
imgui.InputText(u8'###POISKGPS',imguifindgps)
for k,v in pairs(gpsitems) do
    if v.buttonname:find(imguifindgps.v) then
       if imgui.Button(v.buttonname,btn_size) then answer(u8:decode(v.answer)) gps_state.v = false end
    end
  end


На сколько такой способ правилен?
Если ключи таблицы идут друг за другом и представлены в виде чисел, то в таком случае лучше использовать ipairs вместо pairs, а ручная нумерация каждого из элементов таблицы не требуется, отсчёт итак начинается с единицы.
 
  • Нравится
Реакции: leekyrave