首页 > 解决方案 > 比较 Swift 中的两个对象数组

问题描述

我有两个不同大小的对象数组。第一个带有旧数据,第二个带有来自服务器的更新数据(包括旧数据和新数据),数据可以混合。我想了解这些数组之间的区别。

我的课

class Station {
  var dateOfIssue: Date
  var region: String
  var locality: String
  var bsName: String
  var freqIn: String
  var freqOut: String
  var networkType: String
  var provider: String
  var bsUsableName: String
  ...
}

我要比较的数组(示例)

var a = [Station]()
var b = [Station]()
for _ in 0...5 {      
  a.append(Station(someRandomStationValue...)
}
b = a
for _ in 0...7{
  b.append(Station(someRandomStationValue...)  //array "b" will contain all that array "a" contains and some new values
}

如何比较这些数组,比较它们之间的所有字段并获得一个有差异的新数组(如在 java: 中b.removeAll(a))?

标签: arraysswiftdifference

解决方案


您可以使用Setwhich 提供内置.subtract().subtracting()方法来删除两个集合中的公共条目

struct Station: Hashable,CustomStringConvertible {
    var id: Int
    var region: String
    var locality: String
    var bsName: String

    // Just to provide a pretty print statement
    var description: String {
        return "ID: \(id) | region: \(region) | locality: \(locality) | bsName: \(bsName)"
    }
}

var stations1 = Set<Station>()
var stations2 = Set<Station>()

for currentNumber in 0...3 {
    stations1.insert(Station(id: currentNumber, region: "abc", locality: "abc", bsName: "abc"))
}

for currentNumber in 0...5 {
    stations2.insert(Station(id: currentNumber, region: "abc", locality: "abc", bsName: "abc"))
}

// Caluculating the difference here
print(stations2.subtracting(stations1))

推荐阅读