Swift 3 数组 - 在其他数组的帮助下删除多个元素
Posted
技术标签:
【中文标题】Swift 3 数组 - 在其他数组的帮助下删除多个元素【英文标题】:Swift 3 array - remove multiple elements with help of other array 【发布时间】:2017-02-18 10:27:26 【问题描述】:斯威夫特 3: 我有两个数组,一个是字典(json)的数组,另一个是索引路径的索引(Int 值)(带有元素行和部分的集合类型索引)。在第二个数组的索引行的帮助下,我需要从第一个数组中删除元素。
var arrayString = [ // Array with Json elements
"name" : "A" ,
"name" : "B" ,
"name" : "C" ,
"name" : "D" ,
"name" : "E" ,
"name" : "F" ,
"name" : "G" ,
"name" : "H"
]
现在第二个数组(从第一个数组中删除)
var arrayIndex = [ 2, 3, 5 ] // Array with
我该怎么做? 我想要像
这样的结果数组var arrayString = [
"name" : "A" ,
"name" : "D" ,
"name" : "F" ,
"name" : "G" ,
"name" : "H"
]
【问题讨论】:
【参考方案1】:您的数组arrayIndex
看起来像Int
的数组而不是IndexPath
的数组。
arrayIndex.sorted(by: >).forEach if $0 < self.arrayString.count self.arrayString.remove(at: $0)
如果arrayIndex
是IndexPath
的数组,则使用row
属性从数组中删除对象。
arrayIndex.sorted(by: $0.row > $1.row ).forEach if $0.row < self.arrayString.count self.arrayString.remove(at: $0.row)
【讨论】:
由于从数组中删除一个元素会影响其后元素的索引,所以要确保要删除的索引数组是按降序排列的 @Paulw11 完全忘记了,谢谢你的建议。【参考方案2】:这是使用enumerated
、filter
、contains
和map
创建数组的函数式方法:
var arrayString = [
[ "name" : "A" ],
[ "name" : "B" ],
[ "name" : "C" ],
[ "name" : "D" ],
[ "name" : "E" ],
[ "name" : "F" ],
[ "name" : "G" ],
[ "name" : "H" ]
]
let arrayIndex = [2, 3, 5]
arrayString = arrayString.enumerated()
.filter !arrayIndex.contains($0.0 + 1)
.map $0.1
print(arrayString)
[["name": "A"], ["name": "D"], ["name": "F"], ["name": "G"], ["name": "H"]]
说明:
.enumerated()
获取原始数组并创建一个元组对数组,其中包含与该项目配对的每个项目的索引:(index, item)
filter
从结果数组中选择那些从传递的 (trailing) 闭包返回 true
的项目。在这种情况下,如果一个项目的索引不在arrayIndex
中,则它会被选中
map
用于从结果元组数组中提取 item
索引增加了1
,因为您的示例似乎表明您的arrayIndex
开始于1
而不是0
【讨论】:
以上是关于Swift 3 数组 - 在其他数组的帮助下删除多个元素的主要内容,如果未能解决你的问题,请参考以下文章