给定一个索引数组,我想获得myArray的子数组,其中包含这些索引的项目。 我目前正在迭代索引数组以创建一个子数组,但我想知道是否可以通过使用.filter函数来实现这一点。
var indexes = [3,4,9,11]
myArray.filter(...)
答案 0 :(得分:4)
假设
然后一个简单的地图操作就可以了:
let indexes = [2, 4, 7]
let myArray = ["a", "b", "c", "d", "e", "f", "g", "h"]
let filtered = indexes.map { myArray[$0] }
print(filtered) //["c", "e", "h"]
备注:在早期的Swift版本中,有一个PermutationGenerator
正是出于这个目的:
let filtered = Array(PermutationGenerator(elements: myArray, indices: indexes))
print(filtered) //["c", "e", "h"]
但是,这已在Swift 2.2中弃用,将被删除 在Swift 3.我还没有见过Swift 3替代品。
答案 1 :(得分:0)
你可以试试,虽然这远远没有效率。但如果你坚持使用过滤器
,那就是你得到的let myArray = ["a", "b", "c", "d", "e"]
var indexes = [1, 3]
myArray.filter { (vowel) -> Bool in
if let index = myArray.indexOf(vowel) {
return indexes.contains(index)
}
return false
}
答案 2 :(得分:0)
您还可以使用flatMap来检索已过滤的subArray
let indexes = [2, 4, 7]
let myArray = ["a", "b", "c", "d", "e", "f", "g", "h"]
let subArray = indexes.flatMap { (index) -> String? in
return (0 <= index && index < myArray.count) ? myArray[index] : nil
}