第四章:集合

344 阅读3分钟

swfit有3种常用的集合类型:数组、集合和字典。

数组是一种按照顺序来存储相同类型数据的集合,相同的值可以多次出现在一个数组中的不同位置。而集合和字典类型也是存储了相同类型数据的集合,但都是无序的。集合不允许有相同的值。字典中的值可以重复出现,但是每一个值都有唯一的键值与其对应。

1.1 数组

swift 数组是类型安全的,数组中包含的数据类型必须是明确的。数组的声明格式为Array<DataType> 或者[DataType] 。一般来说,采用后一种比较简洁的方式isEmpty用来判断数组是否为空append 用来向数组的末尾添加一个元素。

var array1 : Array<Int> = [1, 2, 3]
var array2 : [String] = ["1", "2", "3"]

还有一种快捷的数组初始化方法,同种类型的数组可以用运算符+相加,得到一个新的数组。

var array3 = [Int](repeating: 4, count: 3)
var array4 = Array(repeating: 5, count: 3)
var array5 = array3 + array4

可以通过下标语法修改特定位置的元素值或者批量修改数组元素的值。

array5[0] = 7
array5[1...4] = [1, 1, 1, 1]

数组通过方法removeAtIndex()removeFirst()removeLast()删除其中元素。

通过for-in来遍历数组中的元素。

for i in array5 {
    print(i)
}

for (index, value) in array5.enumerated() {
    print("\(index) - \(value)")
}

1.4 集合

集合中的元素是相同类型的,并且元素值是唯一的。集合中的元素是无序的。声明格式为:

Set<DateType>

集合类型的初始化既可以创建一个空集合,也可以通过被赋予的初始值推断集合中元素的类型。

var set1 : Set<String> = Set()
set1 = ["1", "2", "3"]

var set2 : Set = ["1", "2", "3"]

要删除集合中的一个元素,可以使用remove函数。如果集合中有这个元素,删除后返回这个元素的值,如果不存在该元素,则返回nil。如果要删除所有元素,可以使用removeAll函数。

let a = set1.remove("1")

要检查集合中是否包含某个特定的元素,可以直接调用contains函数。

遍历集合一般采用for-in循环来实现。

集合中的元素是无序的,如果要有序的输出集合中的元素,可以使用sorted函数对集合中的元素排序后再输出。

Swfit还提供了其他函数,

  • intersect函数计算两个集合的交集,并形成一个新的集合。
  • union函数计算连个集合的并集,并形成一个新的集合。
  • subtract函数计算一个集合中不属于另一个集合的元素。

1.3 字典

字典通过键值对的形式存储数据,每一个值都对应唯一一个值。字典中数据的组织是无序的。声明字典的格式为:

Dictionary<KeyType,ValueType>

简化格式为:

[KeyType : ValueType]
var dict1 = Dictionary<Int, String>()

var dict2 = [Int : Int]()

对于字典元素进行操作一般有两种方法:一种是利用下标语法,另一种是利用字典类型自带的方法和属性。

下标语法修改字典中的键值对,如果不存在该键值对,则添加新的键值对。 updateValue函数对键值进行修改,如果存在这个键,则对原来的值进行修改并返回原来的值,如果不存在,添加新的键值对并返回nil

删除字典中的元素也有两种方法,一种是将特定的键对应的值赋值为nil,一种是利用字典类型自带的方法removeValueForKey,如果键值对存在则删除成功并返回该键原来对应的值,否则返回nil

var dict : [Int : String] = [1 : "name", 2 : "gender", 3 : "age"]
dict[1] = nil

遍历字典中的元素可以使用for-in循环。

var dict : [Int : String] = [1 : "name", 2 : "gender", 3 : "age"]
for (key, value) in dict {
    print(key, value)
}

字典类型还提供了keysvalues获取所有的键和所有的值的集合。