Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Swift中删除数组中的所有其他元素?_Arrays_Swift - Fatal编程技术网

Arrays 如何在Swift中删除数组中的所有其他元素?

Arrays 如何在Swift中删除数组中的所有其他元素?,arrays,swift,Arrays,Swift,假设我有一个数组: var stringArray = ["a","b","c","d","e","f","g","h","i","j"] 现在,如何删除“a”、“c”、“e”、“g”和“I”(数组中的所有偶数索引) 谢谢 传统的 var filteredArray = [] for var i = 1; i < stringArray.count; i = i + 2 { filteredArray.append(stringArray[i]) } 枚举获取元素数组并返回元组

假设我有一个数组:

var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
现在,如何删除“a”、“c”、“e”、“g”和“I”(数组中的所有偶数索引)


谢谢

传统的

var filteredArray = []
for var i = 1; i < stringArray.count; i = i + 2 {
    filteredArray.append(stringArray[i])
}

枚举
获取元素数组并返回元组数组,其中每个元组都是索引数组对(例如
(.03.1“d”)
)。然后,我们使用模算子去除奇数元素。最后,我们使用
map
将元组数组转换回普通数组。HTH

您可以使用跨步来完成这一点,而不是使用C风格的for循环(在即将发布的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()

let result: [String] = stringArray.indices.flatMap {
    if $0 % 2 != 0 { return stringArray[$0] }
    else { return nil }
}
注意:
结果
需要定义为
[String]
否则编译器不知道使用哪个版本的
flatMap()

或者,如果要在位修改原始阵列,请执行以下操作:

stringArray.indices.reverse().forEach {
    if $0 % 2 == 0 { stringArray.removeAtIndex($0) }
}
在这种情况下,您必须首先调用
索引上的
reverse()
,以便按相反顺序枚举它们。否则,当您到达数组末尾时,您将试图删除一个不再存在的索引。

Swift 4.2 接受泛型并产生简化结果的函数

func stripElements<T>(in array:[T]) -> [T] {
    return array.enumerated().filter { (arg0) -> Bool in
        let (offset, _) = arg0
        return offset % 2 != 0
        }.map { $0.element }
}
func stripElements(在数组中:[T])->[T]{
返回array.enumerated().filter{(arg0)->Bool-in
let(偏移量,u)=arg0
返回偏移量%2!=0
}.map{$0.element}
}

注意,像这样在整个阵列中删除时,在索引处删除非常昂贵。
func stripElements<T>(in array:[T]) -> [T] {
    return array.enumerated().filter { (arg0) -> Bool in
        let (offset, _) = arg0
        return offset % 2 != 0
        }.map { $0.element }
}