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)    

如果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

【讨论】:

以上是关于Swift 3 数组 - 在其他数组的帮助下删除多个元素的主要内容,如果未能解决你的问题,请参考以下文章

swift 删除排序数组中的重复项

如何在Swift中删除数组中的每个其他元素?

在 SpriteKit/Swift 中从数组中删除元素

当我按下后退按钮 Swift 3 时,删除的数据重新出现

添加/删除 UITableView 选择到数组,复选标记在滚动时消失 - Swift

需要帮助在 Swift 3 中声明用于 plist 信息检索的数组 [重复]