#массивы #lua
Есть массив ITEMS(item1=1,item2=2,item4=4,"",item10=10,"",item16=16) Вывожу его содержимое print("массив ITEMS:",table.concat (ITEMS, ", ")) Получаю: 1, 2, 4, , 10, , 16 Как можно удалить пустые строки отсюда?
Ответы
Ответ 1
Ответ @Ainar-G работает некорректно для массивов, где два пустых элемента идут подряд. Есть два способа обойти это: Сперва записать элементы для удаления, а после уже удалить их: local a = { "a", "b", "", "c", "", "", "d" } local function cleanupArray(arr, valtodel) local todelete = {} for k, v in ipairs(arr) do if v == valtodel then todelete[#todelete+1] = k end end for k, v in ipairs(todelete) do table.remove(arr, v-k+1) end return arr end cleanupArray(a, "") print(table.concat(a, ", ")) Try it online! Не менять индекс, если мы удалили элемент: local a = { "a", "b", "", "c", "", "", "d" } local function cleanupArray(arr, valtodel) for i = 1, #arr do ::begin:: local v = arr[i] if v == nil then return end if v == valtodel then table.remove(arr, i) goto begin end end end cleanupArray(a, "") print(table.concat(a, ", "))
Комментариев нет:
Отправить комментарий