标签:Chapter 集合 文档 数组 使用 类型 键值 Swift 字典
Swift提供了3种基本的集合类型:
Arrays
:有序数据的集;Sets
:无序无重复数据的集;Dictionaries
:无序键值对的集。
以上类型都被实现为泛型集合。
集合的可变性
以上类型分配为变量,这个集合就是可变的。我们可以添加或者移除存在的数据项。如果分配成常量,那就是不可变的,大小和内容都不可以改变。
数组(Arrays)
数组使用有序列表存储同一类型多个值。相同的值可以多次出现在同一数组的不同位置中。
数组的定义
数组的定义包含两种方式:
Array[Element]
定义;[Element]
定义。
本文推荐使用第二种方式定义,以下是一个整数数组的定义:
var someInts = [Int]()
如果说代码上下文提供了类型信息,例如函数参数或者已经定义好了类型的变量或者常量,我们可以直接使用[]
创建空数组:
someInts.append(3)
someInts = []
创建一个带默认值的数组
可以使用repeating
参数传入初始值,count
参数传入数组大小:
var threeDoubles = Array(repeating: 0.0, count: 3)
//这是一个[Double]数组,等价于[0.0, 0.0, 0.0]
在数组中使用+
两个相同类型的数组使用+
会直接连接起来,得到新数组类型会直接推断出来,不需要声明。
用数组字面量构造数组
数组的字面量是一系列由逗号分隔并由方括号包裹着的值:[value1, value2, value3]
。
访问和修改数组
count
:获取数组元素的数量;isEmpty
:判断count
是否为0的缩写形式;append(_:)
:在数组后添加新的数据项;+=
:可以直接合并两个数组;[index]
:数组由下标直接访问,从0开始计数,也可以改变已有索引值的值。也可以使用一个范围改变数组内数组,即使新数据和原有数据个数不一样(直接顶替);insert(_:at:)
:在某个索引值之前加入数据;remove(at:)
:移除这个索引值的数据并返回这个数据;removeLast()
:直接移除数组最后一项,避免索引。
数组的遍历
可以使用for-in
直接遍历数组。如果需要每一个数据项以及索引值,那么可以使用enumerated()
方法(这是一个属性)。会返回一个由索引值和数据值构成的元组。
集合(Sets)
**集合(Sets)**存储相同类型并且没有确定顺序的值。当元素顺序不重要并且每个元素只出现一次使用集合而不是数组。
集合类型的哈希值
存储在集合类型的值必须书可哈希化的。必须可以提供一个方法计算他的哈希值。哈希值为Int
类型,相等类型哈希值相同:如果a==b
那么a.hashValue==b.hashValue
。
Swift所有的基本类型都是可哈希化的。
集合类型语法
集合的生命方式是Set<Element>
。集合没有对应的简化形式。
使用构造器构造一个空集合的方式是:
var letters = Set<Character>()
如果可以通过上下文推断集合类型,那么可以直接使用[]
声明一个空集合类型。
使用数组字面量创建集合
数组字面量可以创建集合,当声明为集合类型时,可以直接使用数组字面量赋初值。
Set
类型不能够直接推断出来,必须显式的声明类型。
访问和修改一个集合
count
:获取集合元素的数量;isEmpty
:判断count
是否为0的缩写形式;insert(_:)
:在集合中添加新的数据项;remove(_:)
:删除集合中一个元素,如果包含这个元素就返回这个元素,如果不包含就返回nil
;removeAll(_:)
:删除集合中所有元素;contains(_:)
:检查集合中是否包含这个值。
遍历一个集合
可以使用for-in
进行遍历。但是集合没有顺序,如果要按照顺序访问,需要使用sorted()
方法返回一个有序数组,这个数组的顺序是按照<
的比较顺序。
集合操作
集合可以实现基本的集合操作。
intersection(_:)
:计算两个集合的交集;symmetricDifference(_:)
:计算两个集合的对等茶分集;union(_:)
:计算两个集合的并集;subtracting(_:)
:计算两个集合的差集。
集合成员的关系和相等
==
:两个集合的元素是否元素完全相等;isSubset(of:)
:判断一个集合是否是另一个集合的子集;isSuperset(of:)
:判断一个集合是否是另一个集合的父集;isStrictSubset(of:)
:判断一个集合是否是另一个集合的严格子集(两个集合不可以相等);isStrictSuperset(of:)
:判断一个集合是否是另一个集合的严格父集(两个集合不可以相等);isDisjoint(with:)
:判断两个集合是否不含有相同的值(是否没有交集)。
字典(Dictionaries)
**字典(Dictionaries)**是一个存储多个相同类型值的容器。每一个值(value)都有对应的键值(key)。我们通过键值访问对应的数据。
字典类型创建
字典类型有两种创建方法:
- 使用
Dictionary<Key, Value>
; - 使用
[Key: Value]
。
本文主要使用第二种方式。如果上下文可以推断出字典的类型,可以直接使用[:]
创建一个空字典。
字典类型的字面量
字典类型字面量是由一对一对被逗号分隔,被方括号包裹的键值对。键值对是由键值(key)和数据(value)组成的,[key1: value1, key2: value2, key3: value3]
。字典类型可以进行推断。
访问和修改字典
count
:获取字典元素的数量;isEmpty
:判断count
是否为0的缩写形式;[key]
:下标访问获得对应的数值,也可以进行修改,如果不存在对应值,那么返回nil
,字典返回的是一个可选值,需要解包使用。如果给一个键赋值为nil
,那么这个键对应的值将会删除;updateValue(_:forKey:)
:更新键值对应的数据,如果这个值不存在,会加入新值或者更新原有值并返回旧值。返回类型是可选类型,如果不存在旧值,那么返回nil
;removeValue(forKey:)
:移除对应键值和数据,如果不存在旧值,返回nil
,否则返回旧值。
字典的遍历
可以使用for-in
遍历字典,返回值是元组,包含键值和数据。可以使用keys
属性和values
属性获得字典的键值和数据。并且可以使用类型转换转换成数组类型。两个属性也可以使用sorted()
方法获得排序后的数组。
标签:Chapter,集合,文档,数组,使用,类型,键值,Swift,字典 来源: https://www.cnblogs.com/Liangliang-Developer/p/chapter-4-ji-he-lei-xing.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。