所以说,我有一个数组:如何在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
谢谢!我学到了枚举()。 –