我想为Array
添加一个扩展名,用索引集替换元素:
extension Array {
mutating func replace(newElements: [Element], at indexes: IndexSet) {
//implementation here
}
}
使用的一个例子:
var set: IndexSet = [2, 1]
var array = ["0", "1", "2", "3", "4"]
array.replace(newElements: ["@", "%"], at: set) // custom method from future extension
print(array) //Prints ["0", "%", "@", "3", "4"]
但我无法通过索引从IndexSet
获取元素。我怎么能这样做?或者您可能知道更换阵列中元素的更优雅的解决方案。我正在使用IndexSet
而不是Array<Int>
,因为稍后我会将其用于替换UITableView
中的部分。
答案 0 :(得分:1)
使用[Int]
代替IndexSet
没有任何问题,当你使用它时,你必须使用像indexes.index(indexes.startIndex, offsetBy: 1)
这样的方法来访问索引,非常烦人,我建议只使用{ {1}}和其他数组函数一样,当值超出范围时抛出错误
答案 1 :(得分:0)
正如@Alexander上面提到的那样,使用IndexSet没有任何意义,因为这不是有序的。你可能想要的是每个索引的Int
个数组。那会让你有这样的事情:
extension Array {
mutating func replace(newElements: [Element], at indexes: [Int]) {
for (index, position) in indexes.enumerated() {
guard position < count else {
// error handling
return
}
remove(at: position)
insert(newElements[index], at: position)
}
}
}