目录:

  • 数组:Array
  • 集合:Set
  • 字典:Dictionary

Swift提供Array(有序集合数据)、Set(无序无重复集合)和Dictionary(无序键值对集合)三种基本集合类型来存储明确数据类型的集合数据。

使用var将集合声明为变量,可以在创建之后添加、移除、修改集合内数据项。如果使用let将集合声明为常量,则它的大小和内容就都不可改变。

数组:Array

初始化和赋值:

var someInts = [Int]()      // 创建指定数据类型的空数组
someInts = [] // 为已知数据类型的数据赋空值 // threeDoubles 是一种 [Double] 数组,等价于 [0.0, 0.0, 0.0]
var threeDoubles = Array(repeating: 0.0, count: ) // 创建带有默认值的数据 // sixDoubles 被推断为 [Double],等价于 [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
var anotherThreeDoubles = Array(repeating: 2.5, count: )
var sixDoubles = threeDoubles + anotherThreeDoubles // 通过+组合两个相同数据类型数组 var shoppingList = ["Eggs", "Milk"] // 数组字面量构造数组
var shoppingList: [String] = ["Eggs", "Milk"] // 与上面等价

我们可以使用下标或属性和方法来访问和修改数组:

shoppingList.count               // 获取数组元素个数

// 使用isEmpty属性判断数组书否为空
if shoppingList.isEmpty {
print("The shopping list is empty.")
} shoppingList.append("Flour") // 使用append()方法追加数据元素
shoppingList += ["Chocolate Spread", "Cheese", "Butter"] // 使用+=追加数据元素 var firstItem = shoppingList[] // 使用数组下标访问元素,第一项是"Eggs"
shoppingList[] = "Six eggs" // 使用下标改变数组元素
shoppingList[...] = ["Bananas", "Apples"] // 将4~6的3个元素替换为右边的2个元素
shoppingList.insert("Maple Syrup", at: ) // 使用insert(_:at:)方法在具体索引之前添加元素 let mapleSyrup = remove(at: ) // 移除制定索引的数组元素
let apples = shoppingList.removeLast() // 移除数组最后一项元素

注意:

・不可以用下标访问的形式去在数组尾部添加新项
・数组起始索引为0,最大索引为 count-1

使用for-in遍历数组:

for item in shoppingList {
print(item)
}

使用数组enumerated()方法遍历数组返回元素值和索引:

for (index, value) in shoppingList. enumerated() {
print("Item \(String(index + 1)): \(value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas
集合:Set

一种类型的数据需要存储在Set中,该类型必须是可哈希的,哈希值类型为Int。Swift基本数据类型都可哈希,没有关联值的枚举也可哈希。

自定义数据类型要作为Set元素保存时,必须实现Swift语言的Hashable和Equatable协议。

初始化和赋值:

var letters = Set<Character>() // 创建一个空Sets集合
letters = [] // 已知数据类型,赋值一个空Sets集合, letters依然是Set<Character>类型 // 使用数组字面量构造一个集合
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

访问和修改Set集合:

favoriteGenres.count          // 获取Set集合的元素个数

// 使用isEmpty属性判断Set集合是否为空
if favoriteGenres.isEmpty {
print("As far as music goes, I'm not picky.")
} favoriteGenres.insert("Jazz") // 插入一个Set集合元素
let removedGenre = favoriteGenres.remove("Rock") // 删除一个Set集合元素
favoriteGenres.removeAll() // 删除集合所有元素 // 使用contains()方法判断Set集合是否包含指定元素
if favoriteGenres.contains("Funk") {
print("I get up on the good foot.")
}

使用for-in遍历Set集合:

for genre in favoriteGenres {
print("\(genre)")
}

使用sorted()返回一个已排序的数字来遍历Set集合:

for genre in favoriteGenres.sorted() {
print("(genre)")
}
// prints "Classical"
// prints "Hip hop"
// prints "Jazz
字典:Dictionary

初始化和赋值:

var namesOfIntegers = [Int: String]  // 创建一个空字典
namesOfIntegers = [:] // 给已知数据类型字典赋空值 // 字面量构造一个字典
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

访问和修改Dictionary集合:

airports.count              // 获取字典元素个数

// 判断字典是否为空
if airports.isEmpty {
print("The airports dictionary is empty.")
} airports["LHR"] = "London" //使用下标为指定key字典元素赋值或变更值 // 使用字典的updateValue()方法更新字典元素并检验更新结果
if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
print("The old value for DUB was (oldValue).")
} // 判断字典中是否存在指定key关联元素
if let airportName = airports["DUB"] {
print("The name of the airport is (airportName).")
}
airports["APL"] = nil // 删除字典指定key关联的元素 // 使用字典removedValue()方法删除指定元素并检验删除结果
if let removedValue = airports. removeValue(forKey: "DUB") {
print("The removed airport's name is (removedValue).")
}

使用for-in遍历字典:

for (airportCode, airportName) in airports {
print("(airportCode): (airportName)")
}
// YYZ: Toronto Pearson
// LHR: London Heathrow

通过访问keys或者values属性,我们也可以遍历字典的键或者值:

for airportCode in airports.keys {
print("Airport code: (airportCode)")
}
// Airport code: YYZ
// Airport code: LHR for airportName in airports.values {
print("Airport name: (airportName)")
}
// Airport name: Toronto Pearson
// Airport name: London Heathrow
声明:该系列内容均来自网络或电子书籍,只做学习总结!

Swift学习笔记(5):集合类型的更多相关文章

  1. Swift 学习笔记 enum 枚举类型

    异端,异端啊,我感觉这是map吧? enum ATMStatus { case Success(Int) case Error(String) } func withdraw(amount: Int) ...

  2. Spring.NET学习笔记8——集合类型的注入(基础篇)

    1.基础类 public class Happy    {        public override string ToString()        {            return &q ...

  3. Java学习笔记之---集合

    Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...

  4. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  5. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  6. java学习笔记01--数据类型

    java学习笔记01--数据类型 java数据类型划分 分为两大类型: 1)基本数据类型:类似于普通的值. 2)引用数据类型:传递的是内存的地址. 浮点类型实际上就是表示小数. java基本数据类型 ...

  7. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  8. Hadoop学习笔记—5.自定义类型处理手机上网日志

    转载自http://www.cnblogs.com/edisonchou/p/4288737.html Hadoop学习笔记—5.自定义类型处理手机上网日志 一.测试数据:手机上网日志 1.1 关于这 ...

  9. C#学习笔记之值类型与引用类型

    [TOC] C#学习笔记之值类型与引用类型 1.值类型与引用类型 1.1 深层区别 值类型与引用类型有不同的内存分布,这导致了不同的内存管理机制: 值类型由OS负责内存管理 引用类型由垃圾回收器(GC ...

  10. Swift学习笔记四:数组和字典

      Swift 提供两种集合类型来存储集合,数组和字典. 数组是一个同类型的序列化列表集合.字典是一个能够使用相似于键的唯一标识符来获取值的非序列化集合.也就是说数组是有序的.字典是无序的. 一. 数 ...

随机推荐

  1. Activity嵌套多个Fragment实现横竖屏切换

    一.上图 二.需求 最近项目遇到个横竖屏切换的问题.较为复杂.在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.当中竖屏FP1与FP2能够切换为 ...

  2. Android开发之视图动画基础

    Android的animation由四种类型组成 XML中  alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转 ...

  3. the process android.process.acore has stopped或the process com.phone。。。。

    模拟器一启动 The process android.process.acore has stopped unexpectedly 今天不知道怎么回事,模拟器一启动就狂报错, 模拟器已经重新安装过了, ...

  4. bzoj2464: 中山市选[2009]小明的游戏(最短路)

    2464: 中山市选[2009]小明的游戏 题目:传送门 题解: 最短路的裸题... 代码: #include<cstdio> #include<cstring> #inclu ...

  5. CoreData 从入门到精通(四)并发操作

    通常情况下,CoreData 的增删改查操作都在主线程上执行,那么对数据库的操作就会影响到 UI 操作,这在操作的数据量比较小的时候,执行的速度很快,我们也不会察觉到对 UI 的影响,但是当数据量特别 ...

  6. ASP.NET MVC5 历史数据查询

    在TCX_1706项目中在历史数据库备份及历史数据查询的功能,历史数据包括历史采集数据查询和历史产品数据查询两个 在项目中如何查询历史库的历史表呢? 第一步:在配置文件中添加历史库的链接字符串 第二步 ...

  7. IEEE Access的模板的问题

    这个模板果然问题还是有一些,比如caption换行得自己改class文件.首先感谢一下CSDN的一位网友的经验https://blog.csdn.net/baidu_21381705/article/ ...

  8. 解析浏览器和nodejs环境下console.log()的区别

    写在前面的 在开发调试过程中,我们经常需要调用console.log 方法来打印出当前变量的值,然而,console.log在浏览器环境下 有时会出现一些异常的现象 开撸代码 在浏览器和nodejs环 ...

  9. Map的5种遍历方式

    public class MapF { public static void main(String[] args) { Map<String, Integer> tempMap = ne ...

  10. YUM安装MONGODB发生Error in PREIN scriptlet in rpm package mongodb-enterprise-server-4.0.2-1.el6.x86_64错误

    YUM安装MONGODB发生Error in PREIN scriptlet in rpm package mongodb-enterprise-server-4.0.2-1.el6.x86_64错误 ...