尽管代码相似,但 Set 的结果不同? Swift 中的确切问题是什么?

Different results with Set altough similar code? What is the excact problem in Swift?

我有个小问题。我有两个数组,我试图在其中找到相同的内容。所以我决定将它转换为一个集合,然后使用那些带有“减法”的好函数。但是我得到非常不同的结果。有人能告诉我为什么会这样吗?当我使用“减法”而不是“减法”时,我没有遇到任何问题,但这对我来说很奇怪,我真的不知道为什么会这样。

   var objectIDsWhichExist = [ "kjugsJHL6JYoByOreUQ0wUefsbX2", "18ixZ21PJDXA1WzeJqZzctl7tTk2", "ZeQPYGfDvWMLSVykb4M5FQ6miGX2"]
    var helperObjectIDsWhichExistInAdded = [ "kjugsJHL6JYoByOreUQ0wUefsbX2", "18ixZ21PJDXA1WzeJqZzctl7tTk2"]
    


    var setA = Set(objectIDsWhichExist) /* Updated Data*/
    var setB = Set(helperObjectIDsWhichExistInAdded) /* Standard Data*/
    let different = setA.subtract(setB) // I GET HERE ()  
    print(different) // I GET THIS RESULT "()\n"

令人惊讶的是,这是一个有效的示例。但是我还是不知道为什么???

    var employees: Set = Set(objectIDsWhichExist)
    let neighbors: Set = Set(helperObjectIDsWhichExistInAdded)
    employees.subtract(neighbors)
    print(employees) // HERE IT DOES WORK because i get this -> ["ZeQPYGfDvWMLSVykb4M5FQ6miGX2"]\n"

subtract and subtracting 都计算 2 个集合的差异,但是 subtract 变异 ,而 subtracting 不是。

这意味着 x.subtract(y) 将集合 x 更改为计算出的差异,而 x.subtracting(y) 不会更改 x ],而不是 returns 的区别。另一方面,subtract return什么都没有 (Void)。

当你这样做时

let different = setA.subtract(setB) // I GET HERE ()  
print(different)

你看到 () 被打印出来了,因为那是 Void 的字符串表示形式——一个空元组。

这个有效

employees.subtract(neighbors)
print(employees)

因为 subtract 改变 employee.

这也有效:

let different = setA.subtracting(setB)
print(different)

因为 subtracting 的 return 值 - 设置差异 - 分配给 different。请注意,这不会改变 setA.

这不起作用:

employees.subtracting(neighbors)
print(employees) // still shows the original employees

因为 subtracting 不会改变 employees,而您忽略了它的 return 值。

还有许多其他对此类变异与非变异方法,例如

  • Set.formUnion 对比 Set.union
  • String.append 对比 String.appending