目录:

  • 数组: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. Leetcode_num1_Single Number

    好久没有做题啦.从今天開始刷Leetcode的题.希望坚持的时间能长一点. 先从ac率最高的Single Number開始吧. 题目: Given an array of integers, ever ...

  2. Android 中文字体的设置方法和使用技巧

    Android TextView字体颜色等样式具体解释连接:http://blog.csdn.net/pcaxb/article/details/47341249 1.使用字体库(自己定义字体的使用) ...

  3. 14、反射(reflect)

    一.反射概念 不用实例化也可以调用类中的私有成员:反射慢,实例化快:反射可以看到其他类中的内部构造,透明,但是不安全. JAR:JAVA函数库 WAR:web发布的包 YAR:RPC服务 二.idea ...

  4. C++11新特性应用--介绍几个新增的便利算法(用于分区的几个算法)

    今天继续. C++11新增的关于Non-modifying sequence operations和Modifying sequence operations的算法已经写了.具体信息见之前的博客. 以 ...

  5. bzoj3173: [Tjoi2013]最长上升子序列(树状数组+二分倒推)

    3173: [Tjoi2013]最长上升子序列 题目:传送门 题解:  好题! 怎么说吧...是应该扇死自己...看错了两次题: 每次加一个数的时候,如果当前位置有数了,是要加到那个数的前面,而不是直 ...

  6. m_Orchestrate learning system---十一、thinkphp查看临时文件的好处是什么

    m_Orchestrate learning system---十一.thinkphp查看临时文件的好处是什么 一.总结 一句话总结:可以知道thinkphp的标签被smarty引擎翻译而来的php代 ...

  7. [雅礼NOIP2018集训 day4]

    感觉状态极差啊,今天居然爆零了 主要是以下原因: 1.又是T1看错题肝了两个小时,发现题意理解错误瞬间心态爆炸 2.T2交错了文件名 3.T3暴力子任务和正解(假的)混在一起,输出了两个答案 都想为自 ...

  8. ImageUtils

    JavaSE package com.easystructure.utils.system; import java.awt.Color; import java.awt.Font; import j ...

  9. xxx while the managed IDbConnection interface was being used: Login failed for user xxx

    Process cube的时候遇到如下错误.   Errors in the high-level relational engine. The following exception occurre ...

  10. KMP算法中求next数组的实质

    在串匹配模式中,KMP算法较蛮力法是高效的算法,我觉得其中最重要的一点就是求next数组: 看了很多资料才弄明白求next数组是怎么求的,我发现我的忘性真的比记性大很多,每次看到KMP算法求next数 ...