[关闭]
@phper 2016-08-24T14:24:36.000000Z 字数 2822 阅读 3107

swift 6.1 集合

swift

集合和数组基本是一样的类型,只不过是集合是无序的,而且是没重复的。

集合的声明

声明集合用关键字Set。必须显示声明类型,不然会被认为是数组

  1. var skillsOfA: Set<String> = ["swift","OC"]

集合的用法

  1. //: Playground - noun: a place where people can play
  2. import UIKit
  3. var str = "Hello, playground"
  4. // 0. 声明一个集合用set关键字
  5. var set1:Set<String> = ["a", "b", "c"]
  6. // 1. 声明一个空的集合
  7. var emptySet1: Set<String> = []
  8. var emptySet2 = Set<Int>()
  9. // 2. 或者直接用set,不用申明类型,swift自己去判断
  10. var set2:Set = [1,2,3,4,5,5,6,7,]
  11. print(set2) // [2, 4, 5, 6, 7, 3, 1] 无顺序,且去重了。
  12. // 3. 或者用set 将一个数组转换成 集合
  13. var set3 = Set([1,2,3,3,3,4,5])
  14. print(set3) // [5, 2, 3, 1, 4] 无顺序,且去重了。
  15. //4. count 求集合的长度
  16. set3.count // 5 去重复的大小
  17. emptySet1.count // 0
  18. // 5. isEmpty 判断集合是否为空,是返回true,不为空则返回false
  19. set3.isEmpty //false
  20. emptySet1.isEmpty //true
  21. // 6. first 获取集合的第一个元素,返回可选的元素值
  22. var a = set3.first
  23. print(a) // Optional(5) 可选的5
  24. // 7. contains 集合中是否包含 一个元素,是返回true,不包含则返回false
  25. var b = set3.contains(2) // true
  26. // 8. 遍历一个集合
  27. for i in set3{
  28. print(i) // 5 2 3 1 4
  29. }
  30. // 9. 比较2个集合,用 == 比较。去重后比较。
  31. var set4:Set = [1,2,3]
  32. var set5:Set = [3,3,3,2,1]
  33. set4 == set5 // true
  34. //10 .insert 往集合里面插入一个元素,无须插入。
  35. var set6:Set<String> = []
  36. set6.insert("php")
  37. set6.insert("js")
  38. set6.insert("python")
  39. set6.insert("php") // 重复就插入不进去了。
  40. print(set6) // ["js", "php", "python"]
  41. //11. remove 删除一个元素,返回的可选的,因为可能不存在。
  42. var js = set6.remove("js")
  43. print(js) // Optional("js")
  44. //删除没有的元素
  45. set6.remove("swift") // 返回 nil
  46. //所以可以用if let 解包
  47. if let php = set6.remove("php"){
  48. print("php is remove") // php is remove
  49. }
  50. //12. removeFirst 移除集合的第一个元素
  51. var s = set6.removeFirst()
  52. print(s) // python
  53. //13. removeAll 移除集合所有的元素
  54. set6.removeAll()
  55. print(set6) // [] 空得集合了
  56. //14. union 求2个集合的并集,就也就是合并2个集合。
  57. var skillsOfA: Set<String> = ["swift","OC"]
  58. var skillsOfB: Set<String> = ["HTML","CSS","Javascript"]
  59. var skillsOfC: Set<String> = []
  60. var cc = skillsOfA.union(skillsOfB)
  61. print(cc) // ["swift", "CSS", "OC", "Javascript", "HTML"]
  62. print(skillsOfA) // skillsOfA 还是保持原样的["OC", "swift"]
  63. //unionInPlace 并集后并替换原来的值。
  64. skillsOfA.unionInPlace(skillsOfB)
  65. print(skillsOfA) // skillsOfA 改变了:["swift", "CSS", "OC", "Javascript", "HTML"]
  66. //15. intersect 求2个集合的交集,也就是求2个集合公共的元素。
  67. skillsOfA.intersect(skillsOfB) // 共有 ["HTML","CSS","Javascript"]
  68. skillsOfA.intersectInPlace(skillsOfB) // 替换了skillsOfA的值
  69. print(skillsOfA) // A 的值改变了:["HTML", "Javascript", "CSS"]
  70. //16. subtract 求2个集合的减集,也就是求2个集合没公共的部分。
  71. skillsOfA.subtract(skillsOfB) // [] 2个集合一样
  72. skillsOfA.subtract(skillsOfC) // ["HTML", "Javascript", "CSS"]
  73. skillsOfA.subtractInPlace(skillsOfB) // 改变了集合A的值了。
  74. //16. exclusiveOr 异或,在A中不存在,在B中存在。
  75. skillsOfA.exclusiveOr(skillsOfB) //A 现在是空,就返回了B得元素 ["HTML", "Javascript", "CSS"]
  76. skillsOfA.exclusiveOrInPlace(skillsOfB) // 改变了A元素的值。["HTML", "Javascript", "CSS"]
  77. //17. isSubsetOf 子集,判断一个集合A是否是集合B的子集。也就是B集合里包含A。返回true和false
  78. skillsOfA.isSubsetOf(skillsOfB) //true
  79. skillsOfC.isSubsetOf(skillsOfB) //true //空集合是任意集合的子集
  80. //18. isSupersetOf 超集, 判断一个集合A是否是一个集合的父亲。也就是A集合里包含B。返回true和false
  81. skillsOfA.isSupersetOf(skillsOfB) //true
  82. skillsOfA.isSupersetOf(skillsOfC) //true //任何集合都是空集合的超集
  83. //19. isStrictSupersetOf 真超集。isStrictSubsetOf 真子集。A是B的超集,若A中一定有B中没有的元素,则A是B的真超集,B是A的真子集。
  84. skillsOfA.isStrictSupersetOf(skillsOfB) //false
  85. skillsOfA.isStrictSubsetOf(skillsOfB) //false
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注