Swift数组、字典和集合

本文详细介绍了Swift中的三种集合类型:数组、字典和集合。数组是有序的元素集合,支持多种创建方式和操作,如追加、插入和删除元素。字典是无序的键值对集合,提供访问和修改元素的方法。集合是无重复元素的无序集合,支持基本操作如求交集、并集和差集。文章还探讨了这些集合的可变性和遍历方法。
摘要由CSDN通过智能技术生成

原文出自:标哥的技术博客

前言

Swift语言提供Array、Set和Dictionary三种基本的集合类型用来存储集合数据。数组是有序的数据集;集合是无序无重复的数据集;而字典是无序的键值对数组集。

image

Swift的Array、Set和Dictionary类型被实现为泛型集合。因此,它所存储的元素的类型必须是一致的,同样,我们取出来的数据类型也是明确的。

集合的可变性(Mutability Of Collections)

如果创建一个Arrays、Sets或Dictionaries并且把它分配成一个变量,这个集合将会是可变的。这意味着我们可以在创建之后添加更多或移除已存在的数据项,或者改变集合中的数据项。

如果我们把Arrays、Sets或Dictionaries分配成常量,那么它就是不可变的,它的大小和内容都不能被改变。

若我们确定集合不需要改变,那么我们应该使用不可变集合,也就是使用let声明,那样编译器会为我们优化。

// 在swift中要让Array、Set、Dictionary类型的变量是可变的,用var声明就可以了。
// 如果不希望可变,用let声明即可。
let immutableArrray = [Int]()

// 提示:error: immutable value of type '[Int]' only has mutating
// members named 'append'
//immutableArrray.append(12)

// OK
var mutableArray = [Int]()
mutableArray.append(12)

数组(Arrays)

数组使用有序列表存储同一类型的多个值,相同的值可以多次出现在一个数组的不同位置中。我们需要明确,数组是有序的,元素类型是相同的。

Swift中的Array与Foundation中的NSArray是桥接的,可以相互转换。

创建一个空数组(Create An Empty Array)

由于Swift中的数组是泛型,因此必须指定元素的数据类型:

// 使用构造语法来创建一个由特定数据类型构成的空数组:
// 方括号中必须指定类型,因为Array是一种泛型
var emptyArray = [Int]()

// 也可以使用结构体Array的构造写法
var anotherEmptyArray = Array<Int>()

// 如果之前类型明确了,直接再用[]即可.一样是Int类型的元素,是可推断出来的
emptyArray = []

创建带默认值的数组(Creating An Array With A Default Value)

Swift提供了如下方法,可以创建带有默认值的数组,这个构造方法是使用count个指定元素来初始化:

/// Construct a Array of `count` elements, each initialized to
/// `repeatedValue`.
public init(count: Int, repeatedValue: Element)

例如:

var threeDoubles = [Double](count: 3, repeatedValue:0.0)
// threeDoubles 是一种 [Double] 数组,等价于 [0.0, 0.0, 0.0]

数组相加来创建数组(Creating An Array By Adding Two Array Togeter)

两个数组能够通过加号+来创建一个合并的数组,是因为苹果为我们提供了这样的方法:

public func +<RRC1 : RangeReplaceableCollectionType, RRC2 : RangeReplaceableCollectionType where RRC1.Generator.Element == RRC2.Generator.Element>(lhs: RRC1, rhs: RRC2) -> RRC1

这是个泛型函数,要求类型RRC1和RRC2是遵守RangeReplaceableCollectionType协议的,并且这两个集合的元素类型要求相同。而数组是遵守RangeReplaceableCollectionType协议的,因此可以通过此方法将两个数组相加。

例如:

// anotherThreeDoubles 被推断为 [Double],等价于 [2.5, 2.5, 2.5]
var anotherThreeDoubles = Array(count: 3, repeatedValue: 2.5)

// sixDoubles 被推断为 [Double],等价于 [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
var sixDoubles = threeDoubles + anotherThreeDoubles

用数组字面量构造数组(Creating An Array With An Array Literal)

我们可以使用字面量数组来进行数组构造,这是一种用一个或者多个数值构造数组的简单方法。字面量是一系列由逗号分割并由方括号包含的数值:

// shoppingList 已经被构造并且拥有两个初始项。
var shoppingList: [String] = ["Eggs", "Milk"]

由于类型是明确的,因此我们可以交由编译器来推断类型数组的类型:

var shoppingList = ["Eggs", "Milk"]

访问和修改数组(Accessing And Modifying An Array)

常见的数组访问和修改操作有:

  • 获取数组元素个数
  • 判断数组是否为空
  • 数组追加元素
  • 数组在某个位置插入元素
  • 数组在某个范围插入元素

数组元素个数

获取数组元素的个数,可通过count属性获取:

// 打印结果:"The shopping list contains 2 items."
print("The shopping list contains \(shoppingList.count) items.")

数组判断是否为空

判断数组是否为空,可以通过isEmpty属性判断,也可以通过count判断:

if shoppingList.isEmpty {
    print("The shopping list is empty.")
} else {
    print("The shopping list is not empty.")
}

// 或者通过count属性
if shoppingList.count == 0 {
    print("The shopping list is empty.")
} else {
    print("The shopping list is not empty.")
}

数组末尾追加元素

常用的有以下几种方法:

  • 通过append()追加
  • 通过appendContentsOf()追加
  • 通过+=追加

我们先来分析一下数组结构体所提供的方法:

/// Append the elements of `newElements` to `self`.
///
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值