我有两个NSCountedSets
,需要减go 它们.为了清晰起见,我使用一个简单的 struct ,其中一个属性作为对象:
struct MyStruct {
let name: String
init(_ name: String) {
self.name = name
}
}
func subtract(_ set1: NSCountedSet, _ set2: NSCountedSet) -> NSCountedSet {
var result = NSCountedSet()
for e in set1 {
let count1 = set1.count(for: e)
let count2 = set2.count(for: e)
let newCount = count1 - count2
if newCount > 0 {
for _ in 1 ... newCount {
result.add(e)
}
}
}
return result
}
let set1 = NSCountedSet(array: [MyStruct("A"), MyStruct("A"), MyStruct("A"), MyStruct("B"), MyStruct("C"), MyStruct("C")])
let set2 = NSCountedSet(array: [MyStruct("A"), MyStruct("B"), MyStruct("C")])
let set3 = subtract(set1, set2) // expected result: ["A", "A", "C"]`
print(set3.count(for: MyStruct("A"))) // observed result: 0 (expected 2)
print(set3.count(for: MyStruct("B"))) // observed result: 0 (expected 0)
print(set3.count(for: MyStruct("C"))) // observed result: 0 (expected 1)
但是,如果我使用:
let set1 = NSCountedSet(array: ["A", "A", "A", "B", "C", "C"])
let set2 = NSCountedSet(array: ["A", "B", "C"])
我得到了预期的结果.
我怀疑每MyStruct("A")
个ETC实际上并不等于其他的ETC,因为它们是重新创建的.这就是我在添加print
语句时看到的,count1
始终为1,count2
始终为0
所以也许有一种方法,我可以通过判断name
的属性来计算MyStruct
的数量,这可能吗?
如果没有,有没有其他解决办法?