Так что у меня есть массив:Как удалить каждый элемент в массиве в Swift?
var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
Теперь, как я могу удалить «а», «в», «е», «г» и «I» (все четные номерные индексы- массив)?
Спасибо!
Так что у меня есть массив:Как удалить каждый элемент в массиве в Swift?
var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
Теперь, как я могу удалить «а», «в», «е», «г» и «I» (все четные номерные индексы- массив)?
Спасибо!
Традиционный
var filteredArray = []
for var i = 1; i < stringArray.count; i = i + 2 {
filteredArray.append(stringArray[i])
}
Функциональная альтернатива
var result = stringArray.enumerate().filter({ index, _ in
index % 2 != 0
}).map { $0.1 }
enumerate
принимает массив элементов и возвращает массив кортежей, где каждый кортеж является пара индекс-массива (например, (.0 3, .1 "d")
) , Затем мы удаляем элементы, которые нечетны, используя оператор модуля. Наконец, мы преобразуем массив кортежей обратно в обычный массив, используя map
. НТН
Вместо того, чтобы использовать C-стиль для-петли (которые устанавливаются устареет в следующей версии Swift) вы могли бы сделать это, используя шаги:
var result = [String]()
for i in 1.stride(to: stringArray.count, by: 2) {
result.append(stringArray[i])
}
Или для еще более функциональное решение ,
let result = 1.stride(to: stringArray.count, by: 2).map { stringArray[$0] }
есть куча разных способов сделать это, но вот пара, что я нашел интересный:
Использование flatMap()
O п indices
:
let result: [String] = stringArray.indices.flatMap {
if $0 % 2 != 0 { return stringArray[$0] }
else { return nil }
}
Примечание:result
должен быть определен как [String]
иначе компилятор не знает, какая версия flatMap()
использовать.
Или, если вы хотите изменить исходный массив на месте:
stringArray.indices.reverse().forEach {
if $0 % 2 == 0 { stringArray.removeAtIndex($0) }
}
В этом случае вы должны позвонить reverse()
на indices
первый, так что они перечислены в обратном порядке. В противном случае к тому моменту, когда вы дойдете до конца массива, вы попытаетесь удалить индекс, который больше не существует.
Обратите внимание, что удаление по индексу действительно дорого при удалении по всему массиву, как это. – Alexander
Спасибо! Я узнал перечисление(). –