如何使用条件过滤自定义对象数组

时间:2017-08-05 08:45:31

标签: arrays swift swift3

我有物品等级

 class Item {
        var id:Int
        var name:String
        var value:Int
        var isDefault:Bool
    }

在Class Item的基础上我有2个[Item]类数组我希望将这个数组与第一个数组中的替换对象合并,如果id匹配则合并第二个,并且应该追加(第一个/第二个)中的所有剩余数组

let fisrt = Item(id: 1, name: "A", value: 3, isDefault:false)
let second = Item(id: 2, name: "B", value:5,isDefault:false)
let third = Item(id: 3, name: "c", value:5,isDefault:false)

var fisrtArray = [fisrt, second, third]

let fisrt2 = Item(id: 4, name: "P", value: 13, isDefault:true)
let second2 = Item(id: 2, name: "Q", value:15, isDefault:true)
let third2 = Item(id: 7, name: "R", value:15,  isDefault:true)
let forth2 = Item(id: 8, name: "S", value:18,  isDefault:true)

var secondArray = [fisrt2, second2, third2,forth2] 

所以我的结果数组应该是

Item(id: 1, name: "A", value: 3, isDefault:false)
Item(id: 2, name: "Q", value:5,isDefault:true)
Item(id: 3, name: "c", value:5,isDefault:false)
Item(id: 4, name: "P", value: 13, isDefault:true)
Item(id: 7, name: "R", value:15,  isDefault:true)
Item(id: 8, name: "S", value:18,  isDefault:true)
  

注意:数组的大小可能是firstArray很大或者是   其次它不依赖。我用for循环做,但我认为还有其他方法

1 个答案:

答案 0 :(得分:0)

let result = secondArray
result.append(contentsOf: fisrtArray.filter { item in
    !secondArray.contains(where: { $0.id == item.id })
})

之后,您可以按result

id进行排序