目录:

  • 数组: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. start_kernel——boot_cpu_init及PER_CPU

    init/main.c /* * Activate the first processor. */ static void __init boot_cpu_init(void) { int cpu = ...

  2. C++ STL 源代码学习(之deque篇)

    stl_deque.h /** Class invariants: * For any nonsingular iterator i: * i.node is the address of an el ...

  3. Gradle 编译多个project(包括多Library库project依赖)指导

    Gradle Android最新自己主动化编译脚本教程(提供demo源代码) 这篇文章我简单写了基于Gradle2.1 进行的android project和android library的编译实例, ...

  4. kentico中的urls

    alias是默认的访问页面 page aliases中可以手动指定访问一个url,然后跳转到当前的页面

  5. IntelliJ IDEA中JAVA连接MYSQL

    1.下载mysql包 2.项目中引入mysql包 3.连接数据库,查询结果 看jdbc数据库连接类 package Facade; import java.sql.*; /** * Created b ...

  6. BZOJ 3569 询问删除指定的k条边后图是否连通 线性基

    思路: 这题思路好鬼畜啊-- 绝对是神思路 //By SiriusRen #include <cstdio> #include <algorithm> using namesp ...

  7. ie浏览器下get方式获取数据无效问题

    在ie浏览器用get方式获取数据时因为发送得到参数地址都是一样的,所以浏览器会优先从缓存获取数据,而不去服务器请求数据,post由于参数不同所以不会影响. 解决方法: 1.  Internet选项-- ...

  8. javascript对象的相关操作

    Window对象 我们知道浏览器对象模型(BOM)是javascript的组成之一,它提供了独立于内容与浏览器窗口进行交互的对象.其分层结构如下: window对象是整个BOM的核心其有documen ...

  9. 关于jsp web项目,jsp页面与servlet数据不同步的解决办法(报错404、405等)即访问.jsp和访问web.xml中注册的/servlet/的区别

    报错信息: Type Status Report Message HTTP method GET is not supported by this URL Description The method ...

  10. Linux与Windows信息交互快捷方法

    要把windows上的D盘挂载的Linux上,首先要知道windows的用户名和密码 假设用户名是administrator,密码是123456 首先,在linux上创建一个挂载的目标目录 mkdir ...