Swift基础入门知识学习(6)-数组(阵列)-讲给你懂

目录

  • 声明字典
    • 创建一个空字典
  • 存取与修改字典
    • 使用for-in遍历字典中的所有值
  • 字典转换为数组

Swift字典(dictionary) 用来存储无序的相同类型数据的集合,Swift 字典会强制检测元素的类型,如果类型不同就会报错。每个值(value)都属于一个唯一的键(key),键作为字典中这个值的识别符号,所有键的类型也必须相同(键与值的类型就不一定要相同)。

字典不使用索引来存储我们的项目元素,而是优化了存储项目的方式,以便快速检索。因此,当我们要找某个“値”,或说要找某个“内容”时,它会立即以键(Key)回復給你一個「值」(value),即使我们有一个里面包含100,000个元素的字典,也不是问题。

声明字典

理解难度
★★☆☆☆
实用程度
★★★☆☆

因为字典内的值没有顺序,所以需要根据这个键(key)来找到需要的值(value)。声明字典类型时,使用Dictionary<Key, Value>这个方式,这里的Key表示字典里键的类型,Value表示字典里储存的类型,如下:

// 声明一个字典类型
var someDict: Dictionary<String, String>// 或是这样也可以
var someAnotherDict: [String: String]

前一個String就是Key,後一個String就是Value。

两个方法都是一样的,用后面的方法就可以了,比较清楚易懂。

创建一个空字典

理解难度
★★☆☆☆
实用程度
★★★☆☆

如果已经有类型标注了,则可以使用[:]设为空字典,如下:

// 声明一个空字典 键的类型是 String , 值的类型是 Int
var myDict = [String: Int]()// 在字典中新增一个值
myDict["one"] = 1// 再将字典设为空字典 因为前面已经有类型标注过了 所以使用 [:]
myDict = [:]

一个key跟一个value组成一组键值对,一个字典以中括号[ ]前后包起来,可以包含多组键值对,每组以逗号 , 分隔,格式如下:

[key1:value1, key2:value2, key3:value3]

存取与修改字典

理解难度
★★★☆☆
实用程度
★★☆☆☆

使用下标(subscript)来存取或是修改字典的值。其余使用方法与数组类似,例子如下:

下标(subscript)的表示方法为字典变数后加一个中括号[ ],中括号里面填入键(key),以取得对应的值(value)。

// 声明一个类型为 [String: String] 的字典
var myDict2 = ["TYO": "Tokyo", "DUB": "Dublin"]// 字典里值的数量
// 打印出:2
print(myDict2.count)// 检查字典里是否有值
if myDict2.isEmpty {print("Empty !")
} else {print("Not empty !")
}
// 打印出:Not empty !// 如果这个 key 没有对应到字典里的值, 就新增一个值
myDict2["LHR"] = "London"// 如果 key 有对应到字典里的值, 则是修改这个值
myDict2["LHR"] = "London Heathrow"// 如果要移除这个值 则是将其设为 nil
myDict2["LHR"] = nil

除了使用下标语法,字典也提供方法可以修改或删除,如下:

var myDict3 = ["LHR": "London", "DUB": "Dublin"]// 使用 updateValue(_:forKey:) 更新一个值
// 返回一个对应值的类型的可选值 (这边就是返回一个 String? )
myDict3.updateValue("London Heathrow", forKey: "LHR")
// 打印出:London Heathrow
print(myDict3["LHR"]!)// 使用 removeValue(forKey:) 移除一个值
// 返回被删除的值, 如果没有对应的值的话则会返回 nil
myDict3.removeValue(forKey: "DUB")

只需要字典中的键或值时,可以使用keys或values属性。这时会建立一个键或值的新数组,例子如下:

var myDict4 = ["LHR": "London", "DUB": "Dublin"]// 只需要键时, 使用 keys 属性, 取得一个只有键的数组
var someArr1 = [String](myDict4.keys)
// someArr1 为 ["LHR", "DUB"]// 只需要值时, 使用 values 属性, 取得一个只有值的数组
var someArr2 = [String](myDict4.values)
// someArr2 为 ["London", "Dublin"]// 如果需要固定顺序的话 可以加上 sorted() 方法
someArr1.sorted()
someArr2.sorted()

使用for-in遍历字典中的所有值

理解难度
★★★☆☆
实用程度
★★☆☆☆

var myDict5 = ["LHR": "London", "DUB": "Dublin"]for (code, n) in myDict5 {print("\(code): \(n)")
}
// 打印出:
// LHR: London
// DUB: Dublin// 如果只需要键或值时, 使用 keys 或 values 属性
for code in myDict5.keys {print(code)
}
// 打印出:
// LHR
// DUBfor n in myDict5.values {print(n)
}
// 打印出:
// London
// Dublin

“遍历”的意思,就是把所有的元素,从头依序全部跑一遍的意思。

字典转换为数组

理解难度
★★★☆☆
实用程度
★★☆☆☆

你可以提取字典的键值(key-value)对,并转换为独立的数组。
实例如下:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)print("输出字典的键(key)")for (key) in dictKeys {print("\(key)")
}print("输出字典的值(value)")for (value) in dictValues {print("\(value)")
}

想想看,打印出的结果是什么呢?
有没有发现,每次打印出来的结果是不一样的?

想想看,为什么呢?

Swift基础入门知识学习(8)-循环-讲给你懂

高效阅读-事半功倍读书法-重点笔记-不长,都是干货

Swift基础入门知识学习(7)-字典-讲给你懂相关推荐

  1. Swift基础入门知识学习(12)-枚举(列举)-讲给你懂

    TED演讲的8个秘诀:学习18分钟高效表达-重点笔记 Swift基础入门知识学习(11-2)-閉包-第二篇-讲给你懂 目录 枚举(列举)语法 使用 Switch 语句匹配枚举(列举)值 相关值 原始值 ...

  2. C++基础入门知识学习(通俗详细讲解)

    目录 命名空间 标注输入输出流 缺省参数 函数重载 引用 内联函数 C++11新特性auto关键字 C++11新特性基于范围的for循环 关键字nullptr 命名空间(关键字namespace) 在 ...

  3. 学python需要什么基础知识-学习Python需要知道哪些基础入门知识?

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python就业前景广阔.很多 ...

  4. ps基础入门知识课程教程学习文字设计制作小白

    ps基础入门知识课程教程学习文字设计制作小白

  5. 零基础入门深度学习的五篇经典教程

    零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂, ...

  6. 零基础入门深度学习(7) - 递归神经网络

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  7. 零基础入门深度学习(4) - 卷积神经网络

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  8. 零基础入门深度学习(3) - 神经网络和反向传播算法

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  9. 零基础入门深度学习 | 第二章:线性单元和梯度下降

    北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作 ...

最新文章

  1. python performance measure 01
  2. centos7下qt creator python配置
  3. 处理数字_3_计算表的行数
  4. php js获取文件大小,js+ajax实现获取文件大小的方法_javascript技巧
  5. .Net之多语言配置
  6. int数组初始化_Java数组
  7. Kali Linux 网络扫描秘籍 第六章 拒绝服务(一)
  8. 【Spring笔记09】Spring中事务传播机制(注解方式)
  9. vivado中bit文件怎么没有生成_【新手入门】ISE工程升级到Vivado及板级信号调试技术...
  10. Excel·VBA考勤打卡记录统计结果
  11. 独孤求败-小滴云架构大课十八式
  12. 【树莓派】基于树莓派的语音机器人
  13. 2021春深入理解计算机系统大作业---hello的一生
  14. 寻址范围、按字寻址、按字节寻址
  15. PCA主成分分析教程(origin分析绘制,无须R语言)
  16. 台式计算机能用蓝牙耳机吗,台式电脑可以连蓝牙耳机吗_台式电脑可以连蓝牙吗-win7之家...
  17. 小学老师工资多少一个月_当农村小学教师工资一年有多少,我给你们看一看
  18. python 计算ssim
  19. android电视盒子软件安装,安卓电视怎么安装软件 智能电视软件安装方法教程
  20. blender 合并多个模型文件中的动画并导出为fbx格式

热门文章

  1. 浅谈一下bias与variance
  2. Ubuntu换源教程
  3. 数据库管理 trove openstack
  4. Centos7防火墙开放/关闭指定端口
  5. Esper入门及示例(CEP引擎)
  6. 三星S5368 ZMKL1官方ROM包下载+刷机教程
  7. 数据链路层网络类型和协议分析(P2P)
  8. 2022年南京市市级农业产业化联合体申报及绩效评价申报程序条件
  9. python爬去电影天堂恐怖片+游戏
  10. 【WY】数据分析 — Seaborn 阶段一 :进阶语法 一 —— 简介