关闭

swift学习笔记 --- Collection Types

标签: swift Set Array
90人阅读 评论(0) 收藏 举报

Mutability of Collections

  这取决于是var还是let,var可变,let不可变

Array

  数组里存放相同类型的对象,swift的Array 桥接于 OC里的NSArray

如何规定数组类型

   有两种方式来确定规定数组里所放数据的类型。第一是 Array<Element>,第二是[Element].

创造一个空的数组

   var someInts = [Int](),如果更具已有的内容推断出someInts为int数组,我们还可以直接用 someInts = []来设置空数组

创造带初始值的数组

  varthreeDoubles =Array(repeating:0.0,count:3)repeating这个参数为初始值,数组更具这个值来推断类型,count为初始值重复的次数。

创造一个数组通过合并两个数组

  var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
 // anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
 
 var sixDoubles = threeDoubles + anotherThreeDoubles
 // sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

创造一个数组的简易语法

 [value 1,value 2, value 3]

 var shoppingList = ["Eggs","Milk"]

访问和修改数组

 count属性:返回数组里的元素数量

 isEmpty属性

 append方法:添加元素

 +=操作符:合并其他数组

 [index]:访问数组元素,[index1...index2]语法可以替换一定范围内的值,

  如:shoppingList[4...6] = ["Bananas","Apples"]要注意的是选中范围内的被替换元素数量不一定

  等于替换的。

 insert(_:at:)方法:如:shoppingList.insert("Maple Syrup", at:0)

 remove(at:)方法:这个方法有返回值,返回值为移出的元素。

 removeLast()方法:


遍历一个数组

 方法一:

        for item in shoppingList {
        print(item)
       }

 方法二:

       如果你想要在得到值的同时,获取到该元素的下标,你应该用数组的enumerated()方法,该方法返回值与下标组成的元组。

       for (index, value) in shoppingList.enumerated() {
       print("Item \(index + 1): \(value)")
     }

 

Sets(注意Sets里的元素必须是可Hash的)

  设置集合类型:

    Set<Element>

  Sets元素的Hash值

   放在Sets里的类型,必须是可Hash的,一个Hash值是一个int类型,String, Int, Double, and Bool都是

   可Hash的


  创造和初始化一个空的Set

     varletters = Set<Character>()

果一个var类型的 Set已经确定了所存储的类型,可以通过 letters = []设置一个空的 Set。

用数组初始化一个 Set

varfavoriteGenres:Set<String> = ["Rock","Classical","Hip hop"]或者

  1. varfavoriteGenres= ["Rock","Classical","Hip hop"]
  2. 访问和修改一个 Set
  3. count 属性:
  4. isEmpty 属性:
  5. insert()方法:favoriteGenres.insert("Jazz")
  6. remove(_:)方法:注意 remove()方法有返回值,如果移除的元素不存在,则返回 nil;
  1. ifletremovedGenre = favoriteGenres.remove("Rock") {
  2. print("\(removedGenre)? I'm over it.")
  3. }else {
  4. print("I never much cared for that.")
  5. }
  6. // Prints "Rock? I'm over it."

   contains(_:) 方法:检验 Set 是否包含某元素

   遍历 Set 方法:

             1)  

  1. forgenrein favoriteGenres {
  2. print("\(genre)")
  3. }
  4. // Jazz
  5. // Hip hop
  6. // Classical
  7. 2)
  1. forgenrein favoriteGenres.sorted() {
  2. print("\(genre)")
  3. }
  4. // Classical
  5. // Hip hop
  6. // Jazz

         Set的sorted()方法,返回一个安 set 中元素从小到大排列的数组。

  集合操作

     intersection(_:) :返回一个新集合,这个新集合是两个集合的交集

           symmetricDifference(_:) :返回两个集合交集的补集

           union(_:):返回两个集合的并集。

           subtracting(_:):返回一个集合减去两个集合的并集。

     ==:判断两个集合的内容是否完全相同

     isSubset(of:):判断某个集合是否为另一个集合的子集。

     isSuperset(of:):判断某个集合是否为另一个集合的父集

     isStrictSubset(of:) or isStrictSuperset(of:) :判断是否包含但不相同。

          isDisjoint(with:):判断两个集合是否有相同值


 

Dictionaries

       设置字典类型:
      Dictionary<Key, Value> 或者  [key:value]其中key 必须是可hash的

       创造一个空字典
         varnamesOfIntegers = [Int:String]()
如果已经知道了namesOfIntegers为字典类型以及 key 和 value的类型直接可以:namesOfIntegers=[]
声明一个数组的简易方法:
  1. varairports: [String:String] = ["YYZ":"Toronto Pearson", "DUB": "Dublin"]或者
  1. varairports = ["YYZ":"Toronto Pearson", "DUB": "Dublin"]

  访问和修改字典:

    count 属性:

    isEmpty 属性:

    增加和修改: dictionary[key] = value 如果字典里没有这个 key 会自动添加,有的话为修改key 下的                值.或者用 updateValue(_:forkey:)方法,和上面唯一的区别是这个方法返回一个可选值,                如果 key存在,返回更改前的值,如果 key 不存在返回 nil。

    移除:   

               dictionary[key] = nil 或者 removeValue(forKey:)这个方法同 updateValue()一样都有返回值。

      

     遍历一个字典:

                

  1. for (airportCode,airportName)in airports {
  2. print("\(airportCode):\(airportName)")

  3. }
  4. forairportCodeinairports.keys {

  1. print("Airport code: \(airportCode)")
  2. }
  3. // Airport code: YYZ
  4. // Airport code: LHR
  5. forairportNamein airports.values {
  6. print("Airport name: \(airportName)")
  7. }
  8. // Airport name: Toronto Pearson
  9. // Airport name: London Heathrow

  10. letairportCodes = [String](airports.keys)
  11. // airportCodes is ["YYZ", "LHR"]
  12. letairportNames = [String](airports.values)
  13. // airportNames is ["Toronto Pearson", "London Heathrow"]


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9595次
    • 积分:442
    • 等级:
    • 排名:千里之外
    • 原创:36篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论