过滤 Swift 数组并给出索引(不是值)

Nic*_*ari 0 arrays functional-programming swift

我需要通过数组元素的某些条件来过滤数组,但我需要获取通过测试的元素的索引,而不是元素本身。

例如:给定一个数组Bool,我想将其转换为一个Int仅包含原始数组元素索引的数组true

可以这样做:

// INPUT array:
let flags = [true, false, true, false]

// OUTPUT array:
var trueIndices = [Int]()

for (index, value) in flags.enumerated() where value == true {
    trueIndices.append(index)
}
Run Code Online (Sandbox Code Playgroud)

......但它根本不是“迅速” 。

有更优雅的方式吗?类似于filter(),但返回索引而不是元素。

vad*_*ian 5

您可以直接filter索引

let flags = [true, false, true, false]    
let trueIndices = flags.indices.filter{ flags[$0] }
Run Code Online (Sandbox Code Playgroud)

let falseIndices = flags.indices.filter{ !flags[$0] }
Run Code Online (Sandbox Code Playgroud)

  • 当然,可以为集合定义一个 `funcindexs(where isInincluded: (Element) -> Bool) -> [Index]` 扩展方法... (3认同)