【问题标题】:Swift 3 array - remove multiple elements with help of other arraySwift 3 数组 - 在其他数组的帮助下删除多个元素
【发布时间】: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" } 
    ]

【问题讨论】:

    标签: ios arrays swift swift3 closures


    【解决方案1】:

    您的数组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) } }  
    

    【讨论】:

    • 由于从数组中删除一个元素会影响其后元素的索引,所以要确保要删除的索引数组是按降序排列的
    • @Paulw11 完全忘记了,谢谢你的建议。
    【解决方案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 从结果数组中选择那些从传递的 (trailing) 闭包返回 true 的项目。在这种情况下,如果一个项目的索引不在arrayIndex 中,则它会被选中
    • map 用于从结果元组数组中提取 item
    • 索引增加了1,因为您的示例似乎表明您的arrayIndex 开始于1 而不是0

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 2021-11-13
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      • 2015-03-30
      • 1970-01-01
      相关资源
      最近更新 更多