按索引过滤数组

时间:2016-10-26 14:12:29

标签: ios swift

我有一系列元素。我还有一个IndexSet,它指定需要将数组的哪些索引提取到新数组中。 E.g:

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

我希望使用swift filter函数,但还没有得到答案。我怎么能这样做?

3 个答案:

答案 0 :(得分:11)

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] }

答案 1 :(得分:0)

您可以像这样使用enumeratedfiltermap

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

答案 2 :(得分:0)

您可以使用Array.elements(at:)

let result = array.elements(at: indexSet)