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. Tensorflow警告:our CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
  2. redhat linux新建用户,linux redhat 添加用户
  3. 如何生成WebPart的部署文件(wsp文件)
  4. Java自动装箱和拆箱
  5. android中seekbar 常用属性列表,随笔–android中修改SeekBar控件默认显示-Fun言
  6. 软考信息系统项目管理师_信息化与信息系统2_常规信息系统集成技术_软件工程---软考高级之信息系统项目管理师004
  7. BUAA OO 2019 第三单元作业总结
  8. (转) MCU实战经验---多种的按键处理
  9. python tkinter获取屏幕大小_使用Python构建属于自己的Markdown编辑器
  10. 个人h5第三方支付接口_个人免签支付接口系统搭建源码多种方式
  11. 1分钟教会python代码实现电影下载
  12. 计算机系统备份教案,系统备份教案.doc
  13. 谷歌恐龙游戏HTML,谷歌浏览器小恐龙游戏
  14. “打酱油”的意思:不关我的事,我只…
  15. Gmail:如何撤回发出的邮件?
  16. 学大伟业(杭州分校)数学联赛 GA3-1 国奥专题班
  17. 在MATLAB环境下使用深度学习网络DeepLabV3+进行语义分割(云图分割)
  18. 【mac】禁用烦人的系统快捷键(⌘M、 ⌘H....)
  19. Go语言的反射三定律
  20. requests模拟登陆 + 验证码

热门文章

  1. 什么是DI(依赖注入)
  2. IDEA设置背景图案
  3. 通付盾携数智反欺诈应用防护解决方案亮相2023金融展
  4. 计算机2级第二套题,2012年计算机二级Access第二十四套上机试题及答案详解
  5. 4k视频编辑台式计算机,字节跳动剪辑工具 “剪映”PC 版体验:支持 4K 视频分辨率...
  6. jQuery卷轴效果
  7. 专家展望未来5年深度学习发展趋势
  8. 天官赐福,Fre2终于来了
  9. python ai对话系统_对话系统
  10. OpenDaylight简介和安装