Filter array by indices

前端 未结 3 1264
闹比i
闹比i 2020-12-06 07:38

I have an array of elements. I also have an IndexSet that specifies which indices of the array need to be extracted into a new array. E.g.:

let array = [\"su         


        
相关标签:
3条回答
  • 2020-12-06 08:22

    You can use enumerated, filter and map like this

    let result = array
        .enumerated()
        .filter { indexSet.contains($0.offset) }
        .map { $0.element }
    
    0 讨论(0)
  • 2020-12-06 08:23

    You can use Array.elements(at:)

    let result = array.elements(at: indexSet)
    
    0 讨论(0)
  • 2020-12-06 08:42

    IndexSet is a collection of increasing integers, therefore you can map each index to the corresponding array element:

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

    This assumes that all indices are valid for the given array. If that is not guaranteed then you can filter the indices (as @dfri correctly remarked):

    let result = indexSet.filteredIndexSet { $0 < array.count }.map { array[$0] }
    
    0 讨论(0)
提交回复
热议问题