Страницы

Поиск по вопросам

суббота, 21 марта 2020 г.

Удалить пустые элементы массива

#массивы #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, ", "))

Комментариев нет:

Отправить комментарий