原文: https://www.programiz.com/swift-programming/arrays

在本教程中,您将学习数组,创建数组,访问数组的值以及数组中的一些常见操作。

在先前的 Swift 数据类型文章中,我们了解了如何创建可以容纳单个值的某些数据类型的变量/常量。

但是,如果我们要存储相同数据类型的多个值怎么办。 我们在 Swift 中使用了数组


什么是数组?

数组只是一个容器,可以在一个有序列表中保存一个数据类型的多个数据(值),即,您以与定义数组中各项相同的顺序获得元素。

数组可以存储任何数据类型的值,例如IntString,类等


如何在 Swift 中声明数组?

您可以通过在方括号[]中指定数据类型来创建一个空数组。

请记住,您必须在方括号内包括类型,否则 Swift 会将其视为普通数据类型,并且您只能在其中存储一个值。

示例 1:声明一个空数组

  1. let emptyIntArr:[Int] = []
  2. print(emptyIntArr)

运行该程序时,输出为:

  1. [ ]

在上面的程序中,我们声明了一个常量emptyIntArr,该常量可以存储整数数组并用 0 值初始化。

您还可以如下定义一个空数组:

  1. let emptyIntArr:Array<Int> = Array()
  2. print(emptyIntArr)

由于 swift 是一种类型推断语言,因此您也可以直接创建数组而无需指定数据类型,但是必须使用一些值进行初始化,以便编译器可以将其类型推断为:

示例 2:声明具有某些值的数组

  1. let someIntArr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  2. print(someIntArr)

运行该程序时,输出为:

  1. [1, 2, 3, 4, 5, 6, 7, 8, 9]

在上面的程序中,我们声明了一个常量someIntArr,该常量可以存储Integer数组,而无需显式指定类型。 另外,我们用值[1,2,3,4,5,6,7,8,9]初始化了数组。


示例 3:声明包含指定数量的单个重复值的数组

您还可以重复给定值多次以在 Swift 中形成数组。 这是通过将数组初始化器与repeatingcount一起使用来完成的。

  1. let arrWithRepeatingValues = Array(repeating: "Hello, World", count: 4)
  2. print(arrWithRepeatingValues)

运行该程序时,输出为:

  1. ["Hello, World", "Hello, World", "Hello, World", "Hello, World"]

在上面的程序中,我们定义了一个常量arrWithRepeatingValues,该常量存储字符串"Hello, World"数组 ,并将相同的值重复 4 次,如count中指定的那样 ]。

注意:在 Swift 中,不能像在其他编程语言中一样创建固定长度大小的数组。 固定长度大小的数组意味着,数组中的元素不能超过初始化期间定义的元素。


值如何存储在数组中?

假设您有一个可以存储字符串数组的常量,如下所示:

  1. let intArr = [21, 34, 54, 12]

值如何存储在数组中的图形表示如下所示:

Swift 数组 - 图1

您创建的所有数组都从索引 0 开始。第一个元素存储在索引 0 中,第二个元素存储在下一个索引(1)中,依此类推。


如何在 Swift 中访问数组元素?

您可以使用下标语法来访问数组的元素,即,您需要在数组名称后的方括号内包含要访问的值的索引。

假设您如上所述声明了一个数组intArr。 第一个元素是intArr [0],第二个元素是intArr [1],依此类推。

Swift 数组 - 图2

示例 4:访问数组的元素

  1. let intArr = [21, 34, 54, 12]
  2. print(intArr[0])
  3. print(intArr[1])
  4. print(intArr[2])
  5. print(intArr[3])

运行该程序时,输出为:

  1. 21
  2. 34
  3. 54
  4. 12

您也可以使用for-in循环访问数组的元素。 有关更多信息,请参见 Swift For-in循环


如何在 Swift 中修改/添加数组元素?

您可以使用下标语法和赋值运算符来修改数组的元素,即,需要在数组名称之后的方括号内包括要更新的值的索引,然后是赋值运算符和新值。

示例 5:修改数组的元素

  1. var intArr = [21, 34, 54, 12]
  2. intArr[0] = 12
  3. intArr[1] = 42
  4. intArr[2] = 45
  5. intArr[3] = 21
  6. print(intArr)

运行该程序时,输出为:

  1. [12, 42, 45, 21]

您还可以使用新值修改数组的所有元素,如下所示:


示例 6:整体修改数组

  1. var intArr = [21, 34, 54, 12]
  2. intArr = [1,2,3]
  3. print(intArr)

运行该程序时,输出为:

  1. [1, 2, 3]

但是,要将新元素添加到现有数组中,则不能使用下标语法。 如果这样做,最终将导致错误。 您不能执行以下操作:


示例 7:使用下标语法在数组中添加新元素(无效)

  1. var intArr = [21, 34, 54, 12]
  2. intArr[4] = 10

运行该程序时,输出为:

  1. fatal error: Index out of range

在将新元素分配给数组intArr时,上述程序给出了错误。 这是因为intArr尚未为索引 4 分配额外的内存,并且无法存储给定值。

为了正确地将新元素插入数组,我们使用数组的append()方法。append()在以下部分中描述。


一些有用的内置数组函数&属性

1. isEmpty

此属性确定数组是否为空。 如果数组不包含任何值,则返回true,否则返回false

示例 8:isEmpty如何工作?

  1. let intArr = [21, 34, 54, 12]
  2. print(intArr.isEmpty)

运行该程序时,输出为:

  1. false

2.first

此属性用于访问数组的第一个元素。

示例 9:first如何工作?

  1. let intArr = [21, 34, 54, 12]
  2. print(intArr.first)

运行该程序时,输出为:

  1. Optional(21)

同样,您可以使用last属性访问数组的最后一个元素。


3.append

append函数用于在数组末尾插入/附加元素。

示例 10:append如何工作?

  1. var intArr = [21, 34, 54, 12]
  2. intArr.append(32)
  3. print(intArr)

运行该程序时,输出为:

  1. [21, 34, 54, 12, 32]

您还可以将一个数组的内容附加到另一个数组,如下所示:

  1. var firstArr = [1,2,3,4]
  2. var secondArr = [5,6,7,8]
  3. firstArr.append(contentsOf: secondArr)
  4. print(firstArr)

运行该程序时,输出为:

  1. [1, 2, 3, 4, 5, 6, 7, 8]

4.insert

此函数用于在数组的特定索引处插入/附加元素。

示例 11:insert如何工作?

  1. var intArr = [21,34,54,12]
  2. intArr.insert(22, at: 1)
  3. print(intArr)

运行该程序时,输出为:

  1. [21, 22, 34, 54, 12]

同样,您也可以使用remove属性删除指定索引处的元素。


5.remove

此函数从数组中删除并返回在指定位置指定的值。

示例 12:remove如何工作?

  1. var strArr = ["ab","bc","cd","de"]
  2. let removedVal = strArr.remove(at: 1)
  3. print("removed value is \(removedVal)")
  4. print(strArr)

运行该程序时,输出为:

  1. removed value is bc
  2. ["ab", "cd", "de"]

同样,您还可以使用removeFirst删除数组的第一个元素,removeLast删除数组的最后一个元素和removeAll清空数组。


6.reversed

此函数以相反的顺序返回数组的元素。

示例 13:reversed()如何工作?

  1. var intArr = [21,22,23,24]
  2. let reversedArr = Array(intArr.reversed())
  3. print(reversedArr)

运行该程序时,输出为:

  1. [24, 23, 22, 21]

7.count

此属性返回数组中元素的总数。

示例 14:count

  1. let floatArr = [10.2,21.3,32.0,41.3]
  2. print(floatArr.count)

运行该程序时,输出为:

  1. 4

要记住的事情

在 Swift 中使用下标语法访问数组元素时,必须确保该值位于索引中,否则将导致运行时崩溃。 让我们在示例中看一下:

  1. let intArr = [21, 34, 54, 12]
  2. print(intArr[-1])

运行该程序时,输出为:

  1. fatal error: Index out of range

在上述程序中,索引 -1 中没有值。 因此,当您尝试访问索引中的值时,将发生运行时崩溃。

为防止这种情况,请首先找到您要删除的元素的索引。 然后删除索引处的元素,如下所示:

  1. var intArr = [21, 34, 54, 12]
  2. if let index = intArr.index(of: 34) {
  3. print("found index")
  4. let val = intArr.remove(at: index)
  5. print(val)
  6. }

运行该程序时,输出为:

  1. found index
  2. 34