博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift入坑系列—集合类型
阅读量:4565 次
发布时间:2019-06-08

本文共 3407 字,大约阅读时间需要 11 分钟。

  • 数组(Arrays)
  • 字典(Dictionaries)

数组(Arrays)

在OC里面,NSArray和NSMutableArray这两个类可以存储任意类型的对象,并且不提供所返回对象的任何特别信息。

在Swift中,数据值被存入某个数组之前类型必须明确。方法是通过显式的类型标注或者类型推断,而且不是必须是class类型。

//定义了一个存储 字符串类型 的可变数组('var'字段修饰)var shoppingList: [String] = ["Eggs", "Milk"] //定义了一个存储 字符串类型 的不可变数组('let'字段修饰) let peopleList: [String] = ["Danny", "Mike", "Johnnie"]

Note:

当然你也可以省略类型标注,因为Swift可以根据你的内容推断出正确的类型,如下面的代码。

var shoppingList = ["Eggs", "Milk"]

创建并构造数组

//创建一个整型空数组var array1 = [Int]()//创建一个特定大小,并且所有数据都为默认的整型数组var array2 = [Int](count: 3, repeatedValue:1)//创建一个特定大小,并且数据类型为默认的推断为浮点型的数组var array3 = [](count: 3, repeatedValue:2.5)

数组的增删改查

  1. 增(插入数据)

    Swift中往数组里面插入数据有多种方式:

    1)append()方法

    shoppingList.append("Flour")

    2)insert(atIndex:)方法

    shoppingList.insert("Maple Syrup", atIndex: 0)

    3)+=赋值运算符

    shoppingList += ["Baking Powder"]
  2. 删(删除数据)

    通过removeAtIndex()方法移除指定位置的数据项。这个方法把数组在特定索引值中存储的数据项移除并且返回这个被移除的数据项(返回的数据项如果不用的时候可以无视):

    let mapleSyrup = shoppingList.removeAtIndex(0)

    通过removeLast()方法可以移除最后一项数据项

    let apples = shoppingList.removeLast()
  3. 改(更新数据)

    //通过指定某一项更新数据项shoppingList[0] = "Six eggs"//通过区间更新区间内数据项shoppingList[4...6] = ["Bananas", "Apples"]

    Note:

    我们不能使用下标语法在数组尾部添加新项。如果我们试着用这种方法对索引越界的数据进行检索或者设置新值的操作,我们会引发一个运行期错误。我们可以使用索引值和数组的count属性进行比较来在使用某个索引之前先检验是否有效。除了当count等于 0 时(说明这是个空数组),最大索引值一直是count - 1,因为数组都是零起索引

  4. 查(访问数据)

    //获取第0项数据并赋值给变量firstItemvar firstItem = shoppingList[0]//获取某个区间的数据项并赋值给另外一个数值let tempArr = shoppingList[1...2]

数组的遍历

通过for-in循环遍历数组中的数据项:

【方式一】

let array = ["Danny", "Johnnie", "Mike"]//遍历数组数据项for item in array { print(item) }
控制台打印:DannyJohnnieMike

【方式二】

let array = ["Danny", "Johnnie", "Mike"]//遍历数组数据项 for (idx, value) in array.enumerate() { print("idx:\(idx) value:\(value)") }
控制台打印:idx:0  value:Danny idx:1 value:Johnnie idx:2 value:Mike

字典(Dictionaries)

创建字典字面量

OC里面,字典字面量的格式是:@{@"key" : @"value"},而Swift里面,字典字面量以及数组字面量均使用中括号[]包住。格式为:[key 1: value 1, key 2: value 2, key 3: value 3]

//创建一个var airports: [String:String] = ["TYO": "Tokyo", "DUB": "Dublin"]
//创建一个键为String,值为Int的空字典var dic1 = Dictionary
()

字典的增删改查

  1. 增(插入数据)

    在字典中使用下标语法来添加新的数据项。可以使用一个合适类型的 key 作为下标索引,并且分配新的合适类型的值:

    airports["LHR"] = "London"
  2. 删(删除数据)

    通过removeValueForKey()方法在字典中移除键值对。这个方法在键值对存在的情况下会移除该键值对并且返回被移除的value或者在没有值的情况下返回nil

    //通过键值“DUB”移除对应的值let removedValue = airports.removeValueForKey("DUB")
  3. 改(更新数据)

    通过使用下标语法来改变特定键对应的值:

    //使用下标语法来改变特定键对应的值airports["LHR"] = "London Heathrow"

    也可以通过updateValue(forKey:)方法设置或者更新特定键对应的值。这个方法还会返回更新值之前的原值或者nil,方便我们检查更新是否成功:

    //通过“DUB”键将旧值更新为“Dublin Internation”let oldValue = airports.updateValue("Dublin Internation", forKey: "DUB")
  4. 查(访问数据)

    使用下标语法来在字典中检索特定键对应的值。由于使用一个没有值的键这种情况是有可能发生的,可选类型返回这个键存在的相关值,否则就返回nil

    if let airportName = airports["DUB"] {    print("DUB键对应的值为: \(airportName).") } else { print("DUB键没有对应的值") }
    控制台打印:DUB键对应的值为: Dublin Internation.

    字典的遍历

【方式一】

通过for-in循环遍历某个字典中的键值对。每一个字典中的数据项都由(key, value)元组形式返回,并且我们可以使用临时常量或者变量来分解这些元组:

//遍历字典对应的键值对for (key, value) in airports {    print("\(key): \(value)") }
控制台打印:TYO: TokyoLHR: London Heathrow

【方式二】

我们也可以通过访问它的keys或者values属性检索一个字典所有的键、值:

//遍历字典所有键for key in airports.keys {    print("该字典的键:\(key)") } //遍历字典所有值 for value in airports.values { print("该字典的值:\(value)") }
控制台打印:该字典的键:LHR该字典的键:TYO该字典的值:London Heathrow该字典的值:Tokyo

Note:

当你想要将字典的键、值分别存起来的话,可以使用数组的APIArray()进行存储

//将字典的所有键存进keys数组中let keys = Array(airports.keys)//将字典的所有值存进values数组中 let values = Array(airports.values)

转载于:https://www.cnblogs.com/Free-Thinker/p/6294153.html

你可能感兴趣的文章
数据结构之最大不重复串
查看>>
为什么要配置sdk-tools/platform-toools?
查看>>
自己动手开发更好用的markdown编辑器-07(扩展语法)
查看>>
maven dependency:tree中反斜杠的含义
查看>>
队列的循环队列
查看>>
程序中的日期格式
查看>>
大众点评CAT错误总结以及解决思路
查看>>
MyEclipse 检出新项目后,如果项目名称签名有个红色感叹号
查看>>
Java开发环境系列:一篇能解决你99%问题的排雷日记
查看>>
从0开始学爬虫3之xpath的介绍和使用
查看>>
Shell成长之路
查看>>
vim下正则表达式的非贪婪匹配
查看>>
一个python的计算熵(entropy)的函数
查看>>
spring源码学习——spring整体架构和设计理念
查看>>
模拟window系统的“回收站”
查看>>
OpenCV中的split函数
查看>>
MongoDB divide 使用之mongotempalte divide
查看>>
SSH不允许进行DNS解析
查看>>
Git(介绍和安装)
查看>>
磁盘管理
查看>>