Swift学习笔记4:数组和字典

Swift学习笔记四:数组和字典
  Swift 提供两种集合类型来存储集合,数组和字典。数组是一个同类型的序列化列表集合。字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合。也就是说数组是有序的,字典是无序的。

一. 数组
     和Objective-c中的NSArray不一样。swift的数组不仅可以包含对象,也可以包含非对象
1. 初始化
     1) 对于单一确定类型的数组初始化
               let a:String[] = ["1","n”]
          String[]表示字符串数组类型
          由于swift支持隐式表达,所以也可以直接不定义类型
                   let a = ["1","n"]
     
     2) swift中数组可以存储多种不同类型的值。对于多种类型的数组可以这样显示初始化
          let a:Array = ["1",1,["1","2"]]
           或者隐式初始化       
                         let a = ["1",1,["1","2”]]

注意:同一个数组,最好只存一种类型的值,这样方便存取,也不容易出bug。定义数组的时候最好使用显示定义。显示定义时,如果书写错误,编译器可以直接报错

Swift学习笔记4:数组和字典
       3)初始化空数组
               var a =Int[]()
   注意:未初始化的数组是不能使用的
      Swift学习笔记4:数组和字典
     4) Swift数组类型也提供初始化方法来创建确定长度和提供默认数值的数组。你可以通过这个初始化方法增加一个新的数组,元素的数量成为count,合适的默认值为repeatedValue
var threeDoubles = Double[](count: 3, repeatedValue: 0.0)  // threeDoubles 的类型为 Double[], 以及等于 [0.0, 0.0, 0.0]


     5) 你也可以用array初始化数组
     var a =Array(count:2, repeatedValue:0)
     但不能忽略count和repeatedValue
     
Swift学习笔记4:数组和字典
     6) 你也可以使用+来创建数组
          Swift学习笔记4:数组和字典


2. 读取和修改数组
     1) 通过只读属性count来读取数组的长度
          Swift学习笔记4:数组和字典
       2) 通过一个返回布尔类型的isEmpty属性检查数组的长度是否为0
          ifa.isEmpty{}
      3) 在数组末尾增加一个元素可以通过append方法
          注意:let定义的数组属于常量数组,无法增加元素,只有var定义的变量数组才能使用append增加元素

          Swift学习笔记4:数组和字典

Swift学习笔记4:数组和字典 这时候a=[1,2,3,1]


     
     4) 可以用(+=)操作符来把一个元素添加到数组末尾。同理,只有var定义的变量数组才能添加元素
          Swift学习笔记4:数组和字典
     注意:不能使用a=a+9
     Swift学习笔记4:数组和字典

     5)也可以用(+=)操作符来把一个数组添加到另一个数组的末尾
          Swift学习笔记4:数组和字典
     6) 可以通过下标语法来取数组的值或者修改数组的值
          Swift学习笔记4:数组和字典
            注意:let定义的数组不能改变长度,却可以改变里面的值

          也可以通过下标语法改变一系列的值
               Swift学习笔记4:数组和字典
             但是这种方法对let类型的数组不适用
          Swift学习笔记4:数组和字典
             注意:你不能使用下标语法在数组中添加一个元素。
          Swift学习笔记4:数组和字典这样写编译时不会出错,但是运行时会出bug
     
     7) 在一个特定的索引位置插入一个值,可以使用insert(atIndex:)方法
          Swift学习笔记4:数组和字典

     8)你可以调用removeAtIndex方法移除特定的元素。这个方法移除特定索引位置的元素,并返回这个被移除的元素(尽管你并不关心这个返回值)。

          Swift学习笔记4:数组和字典
     9) 可以使用removeLast移除数组最后一个元素
          Swift学习笔记4:数组和字典

3. 遍历数组
     可以使用for-in循环来遍历数组中的值
          Swift学习笔记4:数组和字典
     如果需要每一个元素的整形的索引值,使用enumerate函数代替会更方便,enumerate函数对于每一个元素都会返回一个包含元素的索引和值的元组(tuple)。你可以在遍历部分分解元祖并储存在临时变量或者常量中。
          Swift学习笔记4:数组和字典


二、字典

swift中的字典和Objective-C中字典不一样,它的key和value可以是任何类型的值

1. 创建字典
     let a = ["a":1,"b":2]


2. 读取和修改字典
     1. 可以使用只读的count属性来检查字典(Dictionary)包含多少个元素。
          Swift学习笔记4:数组和字典
        2. 可以使用下标语法给一个字典添加一个元素。使用合适类型作为新的键,并分配给它一个合适的值
                  Swift学习笔记4:数组和字典
              同样 let类型的字典不能添加值
               Swift学习笔记4:数组和字典

         3. 你也可以使用下表语法改变值
          Swift学习笔记4:数组和字典
              
               let类型的字典也不能改变值
  Swift学习笔记4:数组和字典
          
          4. 或者使用字典的updateValue(forKey:) 方法去设置或者更新一个特定键的值 . 和上面的下标例子一样, updateValue(forKey:) 方法如果键不存在则会设置它的值,如果键存在则会更新它的值, 和下标不一样是, updateValue(forKey:) 方法 如果更新时,会返回原来旧的值rThis enables you to 可以使用这个来判断是否发生了更新。
updateValue(forKey:) 方法返回一个和字典的值相同类型的可选值. 例如,如果字典的值的类型时String,则会返回String? 或者叫“可选String“,这个可选值包含一个如果值发生更新的旧值和如果值不存在的nil值。          if let oldValue = airports.updateValue("Dublin International", forKey: "DUB") {  println("The old value for DUB was \(oldValue).")  }  // prints "The old value for DUB was Dublin."



          5.你也可以使用下标语法通过特定的键去读取一个值。如果字典中的键包含对应的值,这字典下标语法会返回这个键所对应的值,否则返回nil

          6.移除一个元素
                  1)你可以使用下标语法把他的值分配为nil,来移除这个键值对。
               2)也可以使用removeValueForKey方法,这个方法如果存在键所对应的值,则移除一个键值对,并返回被移除的值,否则返回nil。

3. 遍历字典
     Swift学习笔记4:数组和字典
注意:Swift中的字典类型是非序列化集合,也就是无序的