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”]]

注意:同一个数组,最好仅仅存一种类型的值。这样方便存取,也不easy出bug。

定义数组的时候最好使用显示定义。显示定义时。假设书写错误,编译器能够直接报错

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
       3)初始化空数组
               var a =Int[]()
   注意:未初始化的数组是不能使用的
      

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
     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
     

     6) 你也能够使用+来创建数组
          

2. 读取和改动数组
     1) 通过仅仅读属性count来读取数组的长度
          

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
       2) 通过一个返回布尔类型的isEmpty属性检查数组的长度是否为0
          ifa.isEmpty{}
      3) 在数组末尾添加一个元素能够通过append方法
          注意:let定义的数组属于常量数组,无法添加元素,仅仅有var定义的变量数组才干使用append添加元素

          

 这时候a=[1,2,3,1]

     
     4) 能够用(+=)操作符来把一个元素加入到数组末尾。

同理,仅仅有var定义的变量数组才干加入元素
          

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
     注意:不能使用a=a+9
     

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

     5)也能够用(+=)操作符来把一个数组加入到还有一个数组的末尾
          

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
     6) 能够通过下标语法来取数组的值或者改动数组的值
          
            注意:let定义的数组不能改变长度,却能够改变里面的值

          也能够通过下标语法改变一系列的值
               

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
             可是这样的方法对let类型的数组不适用
          
             注意:你不能使用下标语法在数组中加入一个元素。
          

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />这样写编译时不会出错。可是执行时会出bug
     
     7) 在一个特定的索引位置插入一个值。能够使用insert(atIndex:)方法
          

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

     8)你能够调用removeAtIndex方法移除特定的元素。

这种方法移除特定索引位置的元素。并返回这个被移除的元素(虽然你并不关心这个返回值)。

          
     9) 能够使用removeLast移除数组最后一个元素
          

3. 遍历数组
     能够使用for-in循环来遍历数组中的值
          
     假设须要每个元素的整形的索引值,使用enumerate函数取代会更方便,enumerate函数对于每个元素都会返回一个包括元素的索引和值的元组(tuple)。

你能够在遍历部分分解元祖并储存在暂时变量或者常量中。
          

二、字典

swift中的字典和Objective-C中字典不一样,它的key和value能够是不论什么类型的值

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

2. 读取和改动字典
     1. 能够使用仅仅读的count属性来检查字典(Dictionary)包括多少个元素。
          
        2. 能够使用下标语法给一个字典加入一个元素。

使用合适类型作为新的键,并分配给它一个合适的值
                  
              相同 let类型的字典不能加入值
               

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

         3. 你也能够使用下表语法改变值
          
              
               let类型的字典也不能改变值
 
          
          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中的字典类型是非序列化集合,也就是无序的

Swift学习笔记四:数组和字典的更多相关文章

  1. Swift学习笔记(12)--数组和字典的复制

    Swift中,数组Array和字典Dictionary是用结构来实现的,但是数组与字典和其它结构在进行赋值或者作为参数传递给函数的时候有一些不同. 并且数组和字典的这些操作,又与Foundation中 ...

  2. swift学习笔记之---数组、字典、枚举、结构体

    1.数组-Array let types = ["none","warning","error"] //省略类型的数组声明 let menb ...

  3. Swift学习字符串、数组、字典

    一.字符串的使用 let wiseWords = "\"I am a handsome\"-boy" var emptyString = "" ...

  4. JS学习笔记 (四) 数组进阶

    1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...

  5. Swift学习笔记四

    前面三篇笔记通过一些示例展示了Swift的一些特性,粗略地介绍了它的语法和特色,从这一篇笔记开始,将正式系统地介绍Swift的语法和特性了. Swift是一门为iOS和OSX开发准备的全新语言,但是它 ...

  6. Objective-C 学习笔记(四) 数组

    Objective-C 数组作为函数参数传递 如果想在一个函数作为参数,通过一维数组,就必须声明函数形式参数 方式一    指针作为形式参数 - (void) myFunction(int *) pa ...

  7. swift学习笔记(四)关于类的继承

    在swift中,继承是区分类与其它对象的基本特征 继承后的子类能够重写父类的方法,包含类方法和实例方法,属性和附属脚本(subscript) 在继承过程中,构造器方法init()是不被继承的,须要显示 ...

  8. Swift学习笔记(5)--数组

    数组的下标从0开始计数,相关方法属性涉及到下标时也从0开始计数 1.定义: //1.可变数组 var cityArray = ["Portland","San Franc ...

  9. PHP学习笔记之数组篇

    摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇   一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...

随机推荐

  1. zoj 1109 Language of FatMouse(字典树)

    Language of FatMouse Time Limit: 10 Seconds      Memory Limit: 32768 KB We all know that FatMouse do ...

  2. centos单机安装Hadoop2.6

    一,安装环境 硬件:虚拟机 操作系统:Centos 6.4 64位 IP:10.51.121.10 主机名:datanode-4 安装用户:root 二,安装JDK 安装JDK1.6或者以上版本.这里 ...

  3. NGUI本地化

    之前在网上的NGUI本地化教程是基于老版本的了,现在用的3.7版本已经改了很多,以前的本地化教程有点不适用了. 1.资源: 本地化的txt文本起名叫做Chinese.txt,到resource目录下新 ...

  4. Xampp + Zend Studio + xDebug 环境搭建 (Mac,Windows都适用)

    这几天折腾了一下PHP开发环境的搭建,现总结一下安装步骤: 1. 安装 Zend Studio,然后破解. 2. 安装 Xampp  3. 配置 Xampp      3.1 配置 Apache服务端 ...

  5. 第一百五十一节,封装库--JavaScript,表单验证--密码确认验证--回答验证--电子邮件验证加自动补全

    封装库--JavaScript,表单验证--密码确认验证--回答验证--电子邮件验证加自动补全 效果图 html <div id="reg"> <h2 class ...

  6. Java WEB应用开发

    B/S计算模式的3层架构: 软件设计与开发模式的演化 面向机器语言的开发模式 软件的生命周期开发模式 需求分析 系统设计 系统开发 系统测试 运行和维护 原型法开发模式 面向组件(Component) ...

  7. 2017 CCPC 杭州 流水账

    day0: 队内训练ccpc 秦皇岛,敝校自己出的题,感觉一个星期没怎么写代码,手生得很,不出意料被打飞了. day1 (热身赛): 热身赛还算顺利,A题看有的队几分钟就草过去了,还以为又是西安ICP ...

  8. Otter双A同步搭建入门教程

    1.准备阶段 1.1 环境 虚拟机A :192.168.0.130 虚拟机B :192.168.0.131 系统:Ubuntu 16.04 LTS JRE:OpenJDK 1.8.0_151(A.B都 ...

  9. TypeScript 函数 (五)

    传递给一个函数的参数个数必须与函数期望的参数个数一致. 参数类别: 必须参数 可选参数 :可选参数必须在参数后面. 默认参数 :当用户没有传递这个参数或传递的值是undefined时. 它们叫做有默认 ...

  10. iOS-如何导出P12文件

    1.第一次用博客园,排版有点问题. 2.第一步点击进入Launchped 3.第二步点击钥匙串访问 4.第三步 找到登录下的Distribution 然后右键选择导出 5.第四步 选择下面的个人信息交 ...