Yani bir dizi var ki: ŞimdiSwift'deki bir Dizide Her Diğer Eleman Nasıl Kaldırılır?
var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
, "A" nın, "c", "e", "g" ve gelen "i" (bütün çift sayı dizinleri silmek nasıl dizi)?
Teşekkürler!
Yani bir dizi var ki: ŞimdiSwift'deki bir Dizide Her Diğer Eleman Nasıl Kaldırılır?
var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
, "A" nın, "c", "e", "g" ve gelen "i" (bütün çift sayı dizinleri silmek nasıl dizi)?
Teşekkürler!
Geleneksel
var filteredArray = []
for var i = 1; i < stringArray.count; i = i + 2 {
filteredArray.append(stringArray[i])
}
fonksiyonel alternatif
var result = stringArray.enumerate().filter({ index, _ in
index % 2 != 0
}).map { $0.1 }
enumerate
elemanlarının bir dizi alır ve her bir demet, bir göstergesi dizi çifti olduğu dizilerini içeren bir dizi döner (örneğin (.0 3, .1 "d")
) . Daha sonra modulus operatörünü kullanarak garip olan elemanları çıkarırız. Son olarak, map
'u kullanarak tuple dizisini normal bir diziye dönüştürürüz.
var result = [String]()
for i in 1.stride(to: stringArray.count, by: 2) {
result.append(stringArray[i])
}
Veya daha da işlevsel bir çözüm için: Kızgın
yerine (Swift yaklaşan bir sürümünde kaldırılacaktır ayarlandığı) için-döngüler C-stili kullanmak yerine, bu kullanarak atılımlar başarabileceğinizi ,
let result = 1.stride(to: stringArray.count, by: 2).map { stringArray[$0] }
Bunu yapmanın farklı şekillerde bir demet, ama burada buldum bir çift ilginç:
flatMap()
o kullanılması n indices
:
let result: [String] = stringArray.indices.flatMap {
if $0 % 2 != 0 { return stringArray[$0] }
else { return nil }
}
Not: [String]
aksi derleyici kullanmak flatMap()
hangi sürümünü bilmez olarakresult
tanımlamak gerekir.
stringArray.indices.reverse().forEach {
if $0 % 2 == 0 { stringArray.removeAtIndex($0) }
}
onlar ters sırada sayılan konum böylece ilk indices
üzerinde reverse()
aramak zorunda Bu durumda. Aksi takdirde dizinin sonuna geldiğinizde artık olmayan bir endeksi kaldırmaya çalışacaksınız.
Not, dizindeki tüm dizin boyunca çıkarılırken, dizinde kaldırılması gerçekten pahalıdır. – Alexander
Teşekkürler! Enumerate'ı öğrendim(). –