按索引过滤数组

我有一个元素的数组。 我也有一个IndexSet,指定数组中的哪些索引需要被提取到一个新的数组中。 例如:

let array = ["sun", "moon", "star", "meteor"] let indexSet: IndexSet = [2, 3] // Some magic happens here to get: let result = ["star", "meteor"] 

我正在寻找使用快速filterfunction,但还没有得到答案。 我怎样才能做到这一点?

IndexSet是递增整数的集合,因此可以每个索引映射到相应的数组元素:

 let array = ["sun", "moon", "star", "meteor"] let indexSet: IndexSet = [2, 3] let result = indexSet.map { array[$0] } // Magic happening here! print(result) // ["star", "meteor"] 

这假定所有的索引对于给定的数组都是有效的。 如果不能保证,那么你可以过滤索引(正如@dfri正确表示):

 let result = indexSet.filteredIndexSet { $0 < array.count }.map { array[$0] } 

你可以像这样使用enumeratedfiltermap

 let result = array .enumerated() .filter { indexSet.contains($0.offset) } .map { $0.element }