斯威夫特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" }
]
答案 0 :(得分:5)
您的数组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) } }
答案 1 :(得分: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
从结果数组中选择那些从传递的(尾随)闭包中返回true
的项目。在这种情况下,如果项目的索引不在arrayIndex
map
用于从结果数组中提取item
1
,因为您的示例似乎表明您的arrayIndex
始于1
而非0