Swift 3数组 - 在其他数组的帮助下删除多个元素

时间:2017-02-18 10:27:26

标签: ios arrays swift swift3 closures

斯威夫特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" } 
    ]

2 个答案:

答案 0 :(得分:5)

您的数组arrayIndex看起来像Int的数组,而不是IndexPath的数组。

arrayIndex.sorted(by: >).forEach { if $0 < self.arrayString.count { self.arrayString.remove(at: $0) } }  

如果arrayIndexIndexPath数组,则使用row属性从数组中删除对象。

arrayIndex.sorted(by: { $0.row > $1.row }).forEach { if $0.row < self.arrayString.count { self.arrayString.remove(at: $0.row) } }  

答案 1 :(得分:2)

以下是使用enumeratedfiltercontainsmap创建数组的功能方法:

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