美文网首页
Swift5-外行零基础入门_7-集合(上)

Swift5-外行零基础入门_7-集合(上)

作者: DavidShawn | 来源:发表于2020-12-21 17:09 被阅读0次

    集合

    什么是集合?

    我们之前介绍了数据类型,每个数据类型中往往包含是单条数据。其实,多条数据也可以组合的形式出现。这种组合起来的数据,就叫做集合。
    那么,有哪些组合的形式呢?

    数据的组合形式

    数据的组合形式有三种:数组Array,集合Set,字典Dictionary

    • 数组:var array = [1,2,3]
    • 集合:var set = [1,2,3]
    • 字典:var dictionary = ["numberA":1, "numberB":2, "numberC":3]

    这里也有个集合,不是我们本节标题中说的那个集合。我们后面用数据组合这样的描述性语言来避免混淆。

    • 术语,英语叫做jargon,也叫黑话,通常是流行在特定的人群之间的简便用语。除了可以提高沟通效率,还能有效隔绝并分辨另外的群体。
    • 我们在学习编程的时候,会不断碰到各种术语。对老手来说,术语表达的意思更精确,沟通的效率也更高,但是对于新手,简直是噩梦。更糟糕的是,术语抬高了入门的门槛。
    • 我争取把这些术语都翻译成白话。

    观察这三种形式,都是用中括号,将多个数据包起来,中间用逗号连接。其中,字典稍微特殊些,每条数据中间是冒号,成对出现。
    既然数据能组合,而且有三种形式,它们一定都有自己的特点。比如,如何进行创建,访问,操作。

    创建组合

    与创建常量和变量的方法类似,我们来创建一些组合。

    • 创建数组
      var someNumberA = [1,2,3]
      如果我们打印someNumberA的数据类型(print(type(of: someNumbersA))),可以发现,类型为Array<Int>,就是说,这是一个整型类型的数组。
      那么,数据能混合吗?可以试一下:
      var mixedValue = [1,2.2,"Hello"],报错。就是说数组中的数据类型必须一致。但是,这样的混合是接受的。var someNumbersB = [1.1,2,3], 这种数组的类型是Array<Double>。其实Swift已经把里面的Int型隐式转换为Double型了。
      我们还能用let创建常量数组,这个很好理解,常量数组将不能更改,而变量数组可以。为了简便,我们后面默认使用var创建变量数据组合。
      Swift还提供了Array构造数组的方法:var threeDoubles = Array(repeating: 1, count: 3) // [1,1,1]
      这里,我们顺带可以看到数组的内的数据是可以重复的

    • 创建集合
      你刚才可能有点疑惑,集合看起来跟数组不是一样的吗?其实,集合最大的特点就是集合内的数据是无序且非重复的。另外的两个数组的特性,放到集合身上也是一样的,集合中的数据类型必须一致常量集合不能更改,而变量集合可以。其实,集合还有更多自身的独特特性,后面我们会介绍。
      那么,既然形式几乎一样,我们如果创建一组集合呢?
      var setValues: Set = [1,2,3]
      其实在创建任何一个数据时,我们都可以加上冒号后面再跟上数据类型,但是在大部分情况下,Swift是可以推断出类型的,因此,我们建议的原则是,尽量不加,免得代码看起来啰嗦。在这里,我们被迫加了: Set这样一个声明,因此,我们print(type(of: setValues))打印的数据类型就是Set<Int>,一个Int型的Set。

    • 创建字典
      字典里的数据是成对出现的,只要数据类型一致,我们可以这样做:
      var intIntDict = [1:666,2:888,3:999]
      var intStringDict = [1:"A",2:"B",3:"C"]
      var stringStringDict = ["A":"sky","B":"river","C":"mountain"]
      因为中括号中带有带冒号的成对数据,这种形式不需要显式声明,会自动被推断为字典类型。

    我们总结一下如何创建一个组合的数据:
    创建数组:var someNumberA = [1,2,3],创建集合:var setValues: Set = [1,2,3],创建字典:var intStringDict = [1:"A",2:"B",3:"C"]
    组合的一些共有特性:

    1. 组合中的数据类型要一致;
    2. 常量组合不能修改,变量组合可以;

    访问组合

    创建出组合后,我们先看看如何访问它们。

    • count计数
      我们可以计算组合中包含数据的数量。
    var arrayNumbers = [1,2,3,4]             // 定义一个数组
    var setValues: Set = [1,2,3]                 // 定义一个集合
    var intStringDict = [1:"A",2:"B"]      // 定义一个字典
    // 他们都有count方法,用.count调用
    arrayNumbers.count //4
    setValues.count //3
    intStringDict.count //2
    
    • 遍历
      使用for-in进行遍历,从而访问到组合中的每一个值,是一个普遍的操作。
    1. 遍历数组
    var arrayNumbers = [1,2,3]
    for i in arrayNumbers {
        print(i)
    }
    // 1,2,3
    
    1. 遍历集合
      这里就体现了集合与数组的不同,集合是无序的,因此在打印遍历的结果时,排列的顺序是随机的,你可以在Playground中试一下。
    var setValues: Set = [1,2,3]
    for i in setValues {
        print(i)
    }
    // 每次运行,结果顺序会随机变化
    
    1. 遍历字典
      字典有一对值,它们被称作keys: values。如果调用.keys或.values,可以得到一组数组形式的数据。
    var intStringDict = [1:"A",2:"B",3:"C"]
    print(intStringDict.keys)  // 1,3,2 一组无序的值
    

    你可以单独遍历出key,可以单独遍历出value,也可以同时遍历出key: value

    var intStringDict = [1:"A",2:"B",3:"C"]
    // 遍历字典中的keys
    for key in intStringDict.keys {
        print(key)
    }
    // 遍历字典中的values
    for value in intStringDict.values {
        print(value)
    }
    // 同时遍历key和value
    for (key,value) in intStringDict {
        print(key, value)
    }
    

    字典也是无序的,多次运行,我们可以发现,它的遍历结果排列顺序也是随机的。

    • 访问组合
    1. 数组
      数组是有序的,有默认的下标。任何一个数组,从第一个数据开始数,数到最后一个数据。数的时候,要从零开始,每个数据分别对应着0,1,2,3...。因此,我们可以通过指定下标值,访问到想要访问的数据。
    var arrayNumbers = [1,2,3,4,5]
    arrayNumbers[0] // 1
    arrayNumbers[2] // 3
    // 还可以按范围读取
    arrayNumbers[0...3]  // [1, 2, 3, 4] 注意这里返回的是一个数组
    
    1. 字典
      字典是无序的,没有下标,但是有key,我们可以通过key访问value。
    var stringStringDict  = ["A":"sky","B":"river","C":"mountain"]
    stringStringDict["A"]  // "sky"
    stringStringDict["C"]  // "mountain"
    
    1. 集合
      集合是无序的,没有下标,也没有Key,因此,无法访问具体的指定数据。
      但是集合有自己特殊方法,比如排序,包含判断。
    // 排序
    setIntValues.sorted()  // 返回了一个从小到大排序的有序数组
    setStringValues.sorted()  //同样返回一个有序数组
    
    // 包含判断 contains
    setIntValues.contains(1) // true
    setStringValues.contains("D") // false
    

    小结与预告

    本节我们介绍了数据组合的三种形式:数组Array,集合Set,字典Dictionary
    如何创建他们,如何访问他们等,讲到这里,内容已经有点多,我们暂且休息一下。
    有疑惑的地方,你可以试着在playground上面多敲一些代码试试。
    下节,我们继续介绍如何操作这些数据组合。

    相关文章

      网友评论

          本文标题:Swift5-外行零基础入门_7-集合(上)

          本文链接:https://www.haomeiwen.com/subject/rtnpiktx.html