#arrays #sorting #lua #fivem
#массивы #сортировка #lua #пять
Вопрос:
Я довольно новичок в кодировании lua, делал это для сценариев GTAV FiveM, я также новичок здесь, чтобы извиниться, если я сделаю или скажу что-то не так.
Я пытался создать скрипт, который обрабатывает имена колес, их идентификатор и независимо от того, установлены ли они уже на транспортном средстве.
Проблема, с которой я сталкиваюсь, заключается в том, что я больше занимаюсь созданием таблицы. Способ захватить имена колес-по их идентификаторам, но это вызывает и проблему, когда он создает дубликаты ИМЕН, но на самом деле это разные их варианты.
Это фрагмент кода, который я использую для создания таблицы для ясности:
for i = 1, (GetNumVehicleMods(vehicle, 23) 1) do local modName = GetLabelText(GetModTextLabel(vehicle, 23, (i-1))) txt = "" if GetVehicleMod(vehicle, 23) == (i-1) and tonumber(originalWheel) == tonumber(wheeltype) then txt = "Currently Installed" end validMods[i] = { id = (i-1), name = modName, install = txt } end
Этот…из того, что я считаю, это составление списка колес по их идентификатору , например:
validMods = { [1] = { id = 0, name = "Inferno", install = "Currently Installed" }, [2] = { id = 1, name = "Deep Five", install = "" }, [3] = { id = 2, name = "Inferno", install = "" }, [4] = { id = 3, name = "Deep Five", install = "" } }
очевидно, что это всего лишь базовый типизированный пример, где фактическая таблица может содержать до 200 неорганизованных и повторяющихся результатов..но я ни за что на свете не могу понять, как упорядочить таблицу в алфавитном порядке. Сохраните содержимое нетронутым, но реорганизуйте его так, чтобы оно соответствовало названию, а не было таким?
validMods = { [1] = { id = 0, name = "Inferno", install = "Currently Installed" }, [2] = { id = 2, name = "Inferno", install = "" }, [3] = { id = 1, name = "Deep Five", install = "" }, [4] = { id = 3, name = "Deep Five", install = "" } }
Кроме того, если это possible…is можно добавить дополнительный текст в конце повторяющихся имен..например: Inferno, Inferno var2, Inferno Var3
Спасибо за любую помощь, которую можно оказать
Ответ №1:
Поскольку вы получаете эти имена в определенном порядке, вам необходимо отсортировать их после заполнения таблицы.
Чтобы переименовать дубликаты, подсчитайте, как часто вы встречали имя.
-- demo input local validMods = { [1] = { id = 0, name = "Inferno", install = "Currently Installed" }, [2] = { id = 1, name = "Deep Five", install = "" }, [3] = { id = 2, name = "Inferno", install = "" }, [4] = { id = 3, name = "Deep Five", install = "" } } -- count and rename local names = {} for i,v in ipairs(validMods) do if names[v.name] then names[v.name] = names[v.name] 1 v.name = v.name .. " var" .. names[v.name] else names[v.name] = 1 end end -- sort the table by name ascending table.sort(validMods, function(a,b) return a.name lt; b.name end) -- print sorted names for i,v in ipairs(validMods) do print(v.name) end
Комментарии:
1. О боже, спасибо тебе, это именно то, что мне было нужно! Ты сделала мой день особенным, лол
2. просто убедитесь, что вы понимаете, что здесь происходит