Swift中的Set集合

By | 2015年5月15日

Set声明

Set是一种特殊的无序集合类型,这是一个简单的Set集合:

 var setDemo:Set<String> = [“1”,”2”,”3″]

setDemo是一个Set<String>类型的集合,集合中只能出现String类型的数据,如果放入了其他类型,会引发异常!

但是如果没有指定集合中的数据类型,那就没有关系。

var setDemo:Set = [“1”,”2”,”3”,4,5,6,7] 

 此时setDemo中包含了Int和String,这样是没有问题的。

总之,如果手动指定了Set的数据类型,那么就必须按照这个类型进行存放,否则会报错;如果没有指定类型,那都可以。

Set集合另外一个特性就是处理相同值的方法,当一个Set中出现了相同值,不会抛出异常,会自动忽略其他的,只使用一个。

 var setDemo:Set = [1,2,3,4,5,1] 

此时setDemo的长度还是5,虽然出现了2个相同的值,但只取一个,看上去数量是6,实际在运行时内部忽略了多余的了。

Set循环

Set集合的循环和Array一样,可以使用for-in,需要注意的是,Set是一个无序的集合,所以每次运行,输出的值的顺序是不一样的!

如果要对Set中的内容进行排序,可以在for循环中使用swift的sorted函数:

for value in sorted(setDemo){

    println(value)

请注意,使用sorted对set排序,需要保证集合中的数据的类型必须是一样,否则会报错!

Set之间的交并集

set集合提供4种处理集合之间数据交集与并集的函数:

NewImage
 
intersect:返回两个集合中都存在的数据
exclusiveror:返回两个集合各自特有的数据,忽略两个集合中都有的数据
union:返回两个集合中所有数据
subtract:返回不包含右边集合的所有数据
 
4个方法都把合适数据组织成一个新的集合进行返回。
 
Set的比较
 
1)使用(==)来判断2个集合中的值是否完全一样
2)isSubsetof,判断一个集合中的值是否被包含在另个集合中
3)isSupersetof,判断一个集合的所有值是否包含在另个集合中
4)isStrictSubsetof或者isStrictSupersetof,判断一个集合是否是另一个集合的子集,或者,父集合并且和特定集合不相等(不是很理解的感觉!)
5)isDisjointwith,判断是否不含相同的值