Set Programming Guide

前端之家收集整理的这篇文章主要介绍了Set Programming Guide前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在Swift中,Set是管理无序集合的对象。当你不关心集合中元素的顺序,只关心每个元素在整个集合中是唯一的时候,你可以使用Set。Set的内部结构图如下所示:


初始化

// MARK: 初始化@H_301_8@
private@H_301_8@ func testInit@H_301_8@() {
    // 空Set@H_301_8@
    var@H_301_8@ set@H_301_8@ = Set<String>()
    set@H_301_8@ = []
    // 通过参数创建@H_301_8@
    set@H_301_8@ = Set(["阳君"@H_301_8@,"937447974"@H_301_8@])
    set@H_301_8@ = Set(arrayLiteral: "阳君"@H_301_8@,"937447974"@H_301_8@)
    let@H_301_8@ set2:Set<String> = ["阳君"@H_301_8@,"937447974"@H_301_8@]
    print("\(set2)"@H_301_8@)
    // 通过Set创建@H_301_8@
    set@H_301_8@ = Set(set@H_301_8@)
    print("\(set)"@H_301_8@)
}

相关属性

// MARK: 相关属性@H_301_8@
private@H_301_8@ func testProperties@H_301_8@() {
    let@H_301_8@ set@H_301_8@:Set<String> = ["阳君"@H_301_8@,"937447974"@H_301_8@,"swift"@H_301_8@]
    print("count:\(set.count)"@H_301_8@) // 有多少个元素@H_301_8@
    print("first:\(set.first)"@H_301_8@) // 顶部元素@H_301_8@
    print("isEmpty:\(set.isEmpty)"@H_301_8@) // 是否为空@H_301_8@
    print("hashValue:\(set.hashValue)"@H_301_8@) // hash值@H_301_8@
    // 首位和末位@H_301_8@
    var@H_301_8@ index = set@H_301_8@.startIndex
    index = set@H_301_8@.endIndex
    print("index:\(index)"@H_301_8@)
}

查找元素

// MARK: 查找元素@H_301_8@
private@H_301_8@ func testFindingObjects@H_301_8@() {
    let@H_301_8@ set@H_301_8@:Set<String> = ["阳君"@H_301_8@,"swift"@H_301_8@]
    print("contains:\(set.contains("@H_301_8@阳君"))"@H_301_8@) // 是否存在这个元素@H_301_8@
    // 查找位置@H_301_8@
    var@H_301_8@ index = set@H_301_8@.indexOf("阳君"@H_301_8@)
    index = set@H_301_8@.indexOf { (str) -> Bool in@H_301_8@
        return@H_301_8@ "阳君"@H_301_8@ == str
    }
    let@H_301_8@ str = set@H_301_8@[index!] // 根据位置获取元素@H_301_8@
    print("str:\(str)"@H_301_8@)
    // 遍历输出@H_301_8@
    // 无序输出@H_301_8@
    for@H_301_8@ item in@H_301_8@ set@H_301_8@ {
        print("item:\(item)"@H_301_8@)
    }
    // 有序输出@H_301_8@
    for@H_301_8@ item in@H_301_8@ set@H_301_8@.sort() {
        print("item:\(item)"@H_301_8@)
    }
}

增加删除

// MARK: 增加删除@H_301_8@
private@H_301_8@ func testAddAndRemove@H_301_8@() {
    var@H_301_8@ set@H_301_8@:Set<String> = ["阳君"@H_301_8@,"swift"@H_301_8@]
    set@H_301_8@.insert("IOS"@H_301_8@) // 增加@H_301_8@
    var@H_301_8@ str = set@H_301_8@.remove("IOS"@H_301_8@) // 删除指定元素,并返回删除的元素@H_301_8@
    str = set@H_301_8@.removeAtIndex(set@H_301_8@.indexOf("阳君"@H_301_8@)!) // 根据位置删除@H_301_8@
    str = set@H_301_8@.removeFirst() // 删除首个@H_301_8@
    set@H_301_8@.removeAll() // 删除所有@H_301_8@
    print("str:\(str)"@H_301_8@)
}

结合和重组

// MARK: 结合和重组
private@H_301_8@ func testCombiningAndRecombining() {
    let a@H_301_8@:Set<String> = ["阳君"@H_301_8@,"swift"@H_301_8@]
    let b:Set<String> = ["IOS"@H_301_8@,"swift"@H_301_8@]
    let c:Set<String> = ["阳君"@H_301_8@,"swift"@H_301_8@,"IOS"@H_301_8@]
    print("isEqual:\(a == b)"@H_301_8@) // 是否相等@H_301_8@
    print("isSubsetOf:\(a.isSubsetOf(c))"@H_301_8@) // a是否是c的子集@H_301_8@
    print("isSupersetOf:\(c.isSupersetOf(a))"@H_301_8@) // a是否是c的子集@H_301_8@
    var set@H_301_8@ = a@H_301_8@.intersect@H_301_8@(b) // a交c,返回新set;["937447974","swift"]@H_301_8@
    set@H_301_8@ = a@H_301_8@.union@H_301_8@(b)         // a并b;["阳君","937447974","swift","IOS"]@H_301_8@
    set@H_301_8@ = a@H_301_8@.subtract@H_301_8@(b)      // a差b,即a-a交b;["阳君"]@H_301_8@
    set@H_301_8@ = a@H_301_8@.exclusiveOr(b)   // a并b-a交b;["阳君","IOS"]@H_301_8@
    // 不返回结果集,直接修改前set@H_301_8@
    set@H_301_8@.intersectInPlace(b)   // set交b,结果在set中@H_301_8@
    set@H_301_8@.unionInPlace(b)       // a并b@H_301_8@
    set@H_301_8@.subtractInPlace(b)    // a差b,即a-a交b@H_301_8@
    set@H_301_8@.exclusiveOrInPlace(b) // a并b-a交b@H_301_8@
}

排序

// MARK: 排序@H_301_8@
private@H_301_8@ func testSort@H_301_8@() {
    let@H_301_8@ set@H_301_8@:Set<String> = ["阳君"@H_301_8@,"IOS"@H_301_8@,"837447974"@H_301_8@,]
    var@H_301_8@ array = set@H_301_8@.sort() // 排序,升序@H_301_8@
    array = set@H_301_8@.sort { (str1,str2) -> Bool in@H_301_8@
        return@H_301_8@ str1 < str2
    }
    // 简写@H_301_8@
    array = set@H_301_8@.sort({ str1,str2 in@H_301_8@ str1 < str2 })
    array = set@H_301_8@.sort({$0@H_301_8@ > $1@H_301_8@})
    array = set@H_301_8@.sort(>)
    print("\(array)"@H_301_8@)
}

其他

参考资料

Set Structure Reference
The Swift Programming Language (Swift 2.1)
NSSet Class Reference

文档修改记录

时间 描述
2015-10-26 根据Swift2.1 Set的API总结

版权所有:http://blog.csdn.net/y550918116j

猜你在找的Swift相关文章