• Swift -- 5.集合


    数组

    一个数组的元素的类型是一样的,不能有多种数据类型

    使用var声明的是可变数组,let声明的是不可变数组

    声明和创建

    var arr1 : Array<String>

    var arr2 : [Int]

    var arr3 : [String]

    arr1 = Array<String>()

    arr2 = Array<Int>(count: 10, repeatedValue: 0)

    arr2 = [0,1,2]

    赋值和元素数

    arr2[0] = 1

    print(arr1.count)

    添加和删除元素

    arr1.append("spring")

    arr1 = arr1 + ["summer"]

    arr3 = ["win"]

    arr1 += arr3

    arr1.insert("fall", atIndex: 2)

    let weather = arr1[0...1]

    arr1[1...3] = ["2","3","4","5"]

    arr1.removeAtIndex(4)

    arr1.removeLast()

    arr1.removeAll()

    字典

    一个字典中的key或value只能有一种类型,比如key是String类型,value是Int类型,不能value中包含多种类型

    使用var声明的字典是不可变的,使用let声明的字典是可变的

    //声明和实现

    var myDic : Dictionary<String, String>

    var scores :[String:Int]

    var health : [String:String]

    myDic = Dictionary<String, String>()

    scores = Dictionary<String, Int>(minimumCapacity: 5)//创建包括5个key-value对的字典,感觉没啥用

    print(scores.isEmpty)

    health = ["height":"178", "weight":"80"]

    var emptyDict:[String:Double] = [:]

    //获取value值和赋值

    print(health["height"])  //Optional("178")

    print(health["height"]!) //178

    //使用key来访问value的时候,返回的并非是字典中存储的value类型,而是value的可选类型,当key不存在的时候,返回的是nil

    //需要使用返回的值的时候,需要加叹号来强制解析

    print(health["noExit"]) //nil

    health["blood"] = "78/112"

    //updataValue可以返回之前存储的value,如果之前key不存在,则创建键值对

    var result = scores.updateValue(20, forKey: "java")

    print(result)//nil

    print(scores)//["java": 20]

    var java = scores.updateValue(30, forKey: "java")//

    print(java)//20

    print(scores)//["java": 30]

    //for in遍历字典

    for (name, num) in health

    {

        print("(name)(num)")

    }

    print(health.keys)//LazyMapCollection<Dictionary<String, String>, String>(_base: ["height": "178", "weight": "80", "blood": "78/112"], _transform: (Function))

    var keys = Array(health.keys)

    print(keys)//["height", "weight", "blood"]

    //删除键值对

    health.removeValueForKey("height")

    print(health)

    health["blood"] = nil

    print(health)//可以通知赋值为nil来删除键值对

    health.removeAll()//删除所有键值对

    集合的复制

    Swift的集合都是结构体类型,这些结构体类型都是值类型的。

    在值类型赋值或参数传递的过程中会复制副本,所赋的值或传递的参数,其实只是原数据的副本

    Swift语言中与值类型对应的是引用类型,Swift的类才是引用类型,引用类型在赋值或传递参数过程中只是传递引用(也就是指针,不会复制对象的副本)

    虽然集合与整形,浮点型,字符串等都是值类型,但是由于集合本身是一个容器,它会包含另外一些数据,因此集合的复制要稍微复杂一点

    当集合包含的数据是值类型的时候,那么复制集合时,集合所包含的数据也会复制副本;如果集合包含的数据是引用类型,那么复制集合时,程序只是复制集合所包含的引用——这些引用实际所指向的对象并不会复制

  • 相关阅读:
    AtCoder Beginner Contest 113 D Number of Amidakuji
    UVA
    mt19937 -- 高质量随机数
    牛客网NOIP赛前集训营-提高组(第七场)C 洞穴
    牛客OI周赛4-提高组 C 战争(war)
    牛客OI周赛4-提高组 B 最后的晚餐(dinner)
    bzoj 4318 || 洛谷P1654 OSU!
    Tourists Codeforces
    bzoj 1791 [Ioi2008]Island 岛屿
    洛谷 P2231 [HNOI2002]跳蚤
  • 原文地址:https://www.cnblogs.com/chebaodaren/p/5466256.html
Copyright © 2020-2023  润新知