let array1 = ["a", "b", "c"]
let array2 = ["a", "b", "d"]
let set1:Set<String> = Set(array1)
let set2:Set<String> = Set(array2)
Swift 3.0+可以对集合执行以下操作:
firstSet.union(secondSet)// Union of two sets
firstSet.intersection(secondSet)// Intersection of two sets
firstSet.symmetricDifference(secondSet)// exclusiveOr
5条答案
按热度按时间xfb7svmp1#
是的,Swift有
Set
类。Swift 3.0+可以对集合执行以下操作:
Swift 2.0可以对数组参数进行计算:
Swift 1.2+可计算上集:
如果使用自定义结构体,则需要实现哈希表。
感谢迈克尔·斯特恩在斯威夫特2.0更新的评论中。
感谢Amjad Husseini对哈希信息的评论。
quhf5bfb2#
快速设置操作
范例
A和B的并集
a.union(b)
A和B对称差
a.symmetricDifference(b)
差值A \ B
a.subtracting(b)
A和B的交点
a.intersection(b)
请注意,结果顺序取决于哈希
Swift Set(https://stackoverflow.com/a/70177026/4770877)
ni65a41a3#
这里没有任何标准的库调用,但是你可能想看看ExSwift库,它包含了一系列关于数组的新函数,包括差分、交集和并集。
a0x5cqrl4#
您可能希望遵循与Objective-C相同的模式,Objective-C也缺少此类操作,但有一个简单的解决方法:
how to intersect two arrays in objective C?
ijnw1ujt5#
我所知道的最有效的方法是使用godel数字。谷歌的godel编码。
想法是这样的。假设你有N个可能的数字,并需要使他们的集合。例如,N=100,000,并希望使集合像{1,2,3},{5,88,19000}等。
其思想是在内存中保存N个素数的列表,对于给定的集合{a,b,c,...},您将其编码为
所以你把一个集合编码成一个BigNumber,BigNumber的运算,尽管比整数运算慢,但仍然非常快。
要合并2组A、B,您需要
A和B的最小公倍数,因为A和B都是集合且都是数。
让你走的十字路口
最大公约数。
和/或其他信息。
这种编码被称为godelization,你可以谷歌更多,所有的算术语言写使用弗雷格的逻辑可以编码使用数字以这种方式。
要得到这个操作是--成员?很简单--
要抓红衣主教有点复杂
你把代表集合的数S分解成素因子的乘积,并把它们的指数相加。2如果集合不允许重复,你会得到所有指数都是1。