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