swift4.0 数组Array,集合Set和字典Dictionary

swift编程语言中有三种常用的收集类型,分别为:数组Array, 集合Set和字典Dictionary。这三种类型都属于结构体类型,都是以泛型的形势定义的,以var声明一个收集类型的变量对象,那么该对象是以可修改的方式创建的,可以对该对象做添加,修改,删除等操作;以let声明的对象,不能改变它的值,也不能对其做添加,修改,删除等操作。

第一节 数组

数组是一个可以存放相同类型的多个元素对象的有序线性列表,这些元素可以是任意类型,也可以是元组。但是如果在一个数组中出现在了与其他元素类型不同的元素,那么编译器就会报错。

一个数组的完成类型为:Array<Element>。这里的Element表示存放到该数组中元素的类型,还有一种精简的表示法:Array[Element]。
eg:
       //声明一个存放整型元素的数组对象array,并对它创建一个空数组
       var array = Array<Int>()  ||  var array = [Int]()。

       //声明一个Double类型常量数组,创建10个元素,每个元素都是2.0
       let a = [Double](repeating: 2.0, count: 10)

不过我们更常用的是直接使用数组的字面量[1,2,3,4,5],这样数组的类型为Int。

       //声明一个有4个元素的Double类型数组
       let  a = [1.0, 2.0, 3.0, 4.0]

swift 中还提供了+操作符,可以把两个数组拼接在一起,组成一个新的数组。

eg:
      //将[1, 2, 3] 和 [4, 5, 6]两个数组拼接在一起,组成整型数组a
      //a的元素为[1, 2, 3, 4, 5, 6]
      let a  = [1, 2, 3] + [4, 5, 6]

      //变量数组b有三个Bool类型元素,对于变量数组可以使用+=为自己添加新元素,但是必须是和自己相同的类型的数组,不是元素类型对象
      var b = [false, true, false]
      b+= [true, false]

      //b的元素为[false, true, false, true, false]
      print("b = \(b)")

数组对象的元素访问:如果访问指定元素,可以通过下标操作符[]来获得,若索引值超出了数组本身大小,那么程序会引发异常

eg:
       let a = [1, 2, 3, 4, 5]
 
       // 这里读取数组a的索引0的元素,
       // 即第一个元素,并为常量x初始化
       let x = a[0]
数组的几个基本操作

count:获取数组个数
isEmpty:判断数组是否为空
contains(:):判断数组是否包含某个元素
append(
:):在该变量数组最后面添加元素
insert(_:at:):在该变量数组指定位置添加元素,原本的元素被移动到新元素后面
remove(at:):在该变量数组中移除指定位置的元素

注意:数组字面量(例如:[1,2,3]),本身是一个常量,如果我们对数组字面量进行添加等操作,则会引起编译器报错。

第二节 集合

一个集合也能存放多个相同类型的元素,与数组不同的是:
1:一个集合不允许出现两个相同的元素
2:集合中的元素是无序的
3:并不是所有的类型对象都能作为集合的元素,不过swift的基本类型都可以

一个集合的完整类型为:Set<Element: Hashable>,集合没有精简表示法。
我们可以使用集合的构造方法创建一个空集合,也可以使用数组字面量构建一个集合
eg:
      // 我们通过集合的构造方法来构造一个空的集合变量setA,
      // setA集合对象的每个元素都是Int类型对象
      var setA = Set<Int>()”

      // 我们这里还可以通过集合的不定参数个数的构造方法来创建一个含有指定元素     的集合
      setA = Set<Int>(arrayLiteral: 1, 2, 3, 4)”
 
      // 这里我们通过数组字面量来创建一个集合常量setB,
      // 这里需要对setB显式指定类型
      let setB: Set<Float> = [1.0, 0.5, 2.0]
 
      // 我们也可以用空的数组字面量来构造一个空的集合
      setA = []”

元素集合的访问不能像数组通过索引值,因为它是无序的,可以通过for-in循环,也可以通过flatMap方法,有选择性的将集合元素取出。

集合的几个基本操作

count:获取集合个数
isEmpty:判断集合是否为空
contains(:):判断集合是否包含某个元素
insert(
:at:):在该变量集合指定位置添加元素,如以存在,原本的元素被覆盖,保证唯一性
remove(at:):在该变量集合中移除指定位置的元素

第三节 字典

字典与数组和集合不同,它是以一种键-值对的形式存储元素的,字典中不允许出两个相同的键,但是不同的键可以对应相同的值,字典的元素也是无序的。字典中键的类型与值的类型都是在声明中直接确定的,每个键的类型应该一致,每个值的类型也应该一致,键的类型和值的类型可以相同也可以不同。

字典的完整类型为:Dictionary<Key: Hashable, Value>,这里的key表示键的类型,value表示值的类型,字典也有精简表示法:[key : value].

eg:
      //使用字典默认的构造方式创建一个空的字典变量
      //键的类型为String,值得类型为Int
     var a = Dictionary<String: Int>()

     // 通过字典的不定参数个数的构造方法创建一个字典对象,
     // 这里通过元组将字典的键值对进行捆绑,
     // 元组的第一个元素是键,第二个元素是值。
     a = Dictionary<String, Int>(dictionaryLiteral: ("one", 1), ("two", 2), ("three", 3))

     //使用精简表示法创建一个空的字典变量
     var a = [String : Int]()
      

对字典的值的访问类似于数组对元素的访问,可以通过下标操作符对字段的值进行访问,例如对于一个这样的字典对象dict[String :Int],我们可以通过dict["String"] 的方式来访问键“String”对应的值,不过这里得到的值是一个Optional对象,因为如果指定的键对应的值不存在,会返回空。

eg:
      //声明一个字典常量dict,类型为[String : Int]
      let dict = ["one":1, "two":2, "three":3]

      //访问键"one" 对应的值,得到1
      let one_value = dict["one"]

      //这里访问键"four" 对应的值将得到一个空值

字典的几个基本操作

count: 获取字典的键值对元素个数
isEmpty:判断字典是否为空
keys:获取字典对象的所有键值
values:获取字典对象的所有值
updateValue(_:forKey:):更新一个键对应的值
removeValue(forKey:): 将指定的键的元素移除

注意:这里的keys和values返回的类型为LazyMapCollection,它与集合类型类似,不能通过下标访问元素,一般通过for-in循环迭代访问;变量字典还能通过调用下标方式来新增一个键值对或修改一个键对应的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容