所以說,我有一個數組:如何在Swift中刪除數組中的其他元素?
var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
現在,我怎麼刪除 「一」, 「C」, 「E」, 「G」,和 「i」(所有的偶數從指標陣列)?
謝謝!
所以說,我有一個數組:如何在Swift中刪除數組中的其他元素?
var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
現在,我怎麼刪除 「一」, 「C」, 「E」, 「G」,和 「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
將元組數組轉換回正常數組。 HTH
而不是使用C語言風格的for循環(這是坐落在斯威夫特的即將推出的版本中被取消),你可以做到這一點使用大步:
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()
Ø ñ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
謝謝!我學到了枚舉()。 –