2
2
3
3
使用数组、集合和字典组织数据。
4
4
5
- Swift 提供了三种主要的 ** 集合类型** ,分别是数组、集合和字典,用于存储值集合。数组是有序的值集合。集合是无序的唯一值集合。字典是无序的键值关联集合 。
5
+ Swift 提供了三种主要的 ** 集合类型** ,分别是数组、集合和字典,用于存储值集合。数组是有序的值集合。集合是无序的唯一值集合。字典是无序的键值对关联集合 。
6
6
7
7
![ ] ( CollectionTypes_intro )
8
8
9
- Swift 中的数组、集合和字典始终清楚它们可以存储的值和键的类型。这意味着您不能错误地将一个错误类型的值插入到集合中。这也意味着您可以对将从集合中检索的值类型充满信心 。
9
+ Swift 中的数组、集合和字典对于它们可以存储的值和键的类型始终是明确的。这意味着你不能错误地将一个类型不匹配的值插入到集合中。同时,这也意味着你可以放心地知道从集合中取出的值的类型 。
10
10
11
11
> 提醒: Swift 的数组、集合和字典类型是作为 ** 泛型集合** 实现的。
12
12
> 有关泛型类型和集合的更多信息,请参阅 < doc:Generics > .
@@ -25,9 +25,9 @@ Swift 中的数组、集合和字典始终清楚它们可以存储的值和键
25
25
26
26
## 集合的可变性
27
27
28
- 如果您创建一个数组、一个集合或一个字典,并将其分配给一个变量 ,则创建的集合将是 ** 可变的** 。这意味着,在创建集合后,您可以通过添加、删除或更改集合中的项目来改变(或 ** 更改 ** )集合。如果您将数组、集合或字典分配给常量,则该集合是 ** 不可变的** ,并且其大小和内容无法更改。
28
+ 如果您创建一个数组、集合或字典,并将其赋值给一个变量 ,则创建的集合将是 ** 可变的** 。这意味着,在创建集合后,您可以通过添加、删除或更改集合中的元素来改变(或称为 ** 变异 ** )集合。如果您将数组、集合或字典分配给常量,则该集合是 ** 不可变的** ,并且其大小和内容无法更改。
29
29
30
- > 注意: 在所有不需要更改的情况下,创建不可变集合是一种良好的实践。这样做可以使你更容易理解代码,并使Swift编译器能够优化你创建的集合的性能 。
30
+ > 注意: 在所有不需要更改的情况下,创建不可变集合是一种良好的实践。这样做可以使你更容易理解代码,并使 Swift 编译器能够优化你创建的集合的性能 。
31
31
32
32
## 数组
33
33
@@ -39,16 +39,16 @@ Swift 中的数组、集合和字典始终清楚它们可以存储的值和键
39
39
40
40
### 数组类型简写语法
41
41
42
- Swift 数组的类型完整写作 ` Array<Element> ` ,其中 ` Element ` 是数组允许存储的值的类型。你也可以以简写形式 ` [Element] ` 来写数组类型。尽管这两种形式在功能上是相同的 ,但简写形式更受欢迎,并且在本指南中引用数组的类型时,会使用简写形式 。
42
+ Swift 数组的类型完整写作 ` Array<Element> ` ,其中 ` Element ` 是数组允许存储的值的类型。你也可以以简写形式 ` [Element] ` 来表示数组的类型。虽然这两种形式在功能上是相同的 ,但简写形式更受欢迎,并且在本指南中提到数组类型时将优先使用这种形式 。
43
43
44
44
### 创建空数组
45
45
46
- 你可以使用初始化语法创建某种类型的空数组 :
46
+ 您可以使用构造器语法创建某种类型的空数组 :
47
47
48
48
``` swift
49
49
var someInts: [Int ] = []
50
50
print (" someInts is of type [Int] with \( someInts.count ) items." )
51
- // Prints "someInts is of type [Int] with 0 items."
51
+ // 打印 "someInts is of type [Int] with 0 items."
52
52
```
53
53
54
54
<!--
@@ -61,15 +61,15 @@ print("someInts is of type [Int] with \(someInts.count) items.")
61
61
```
62
62
-->
63
63
64
- 请注意,` someInts ` 变量的类型是从初始值设定项的类型推断为 ` [Int]。 `
64
+ 请注意,` someInts ` 变量的类型根据初始化器的类型推断为 ` [Int] ` 。
65
65
66
- 另外 ,如果上下文已经提供了类型信息,例如函数参数或已经定义类型的变量或常量,你可以使用空数组字面量创建一个空数组,这个字面量表示为 ` [] ` (一对空的方括号)。
66
+ 或者 ,如果上下文已经提供了类型信息,例如函数参数或已经定义类型的变量或常量,你可以使用空数组字面量 ` [] ` (一对空的方括号)来创建一个空数组:
67
67
68
68
``` swift
69
69
someInts.append (3 )
70
- // someInts now contains 1 value of type Int
70
+ // someInts 现在包含 1 个类型为 Int 的值。
71
71
someInts = []
72
- // someInts is now an empty array, but is still of type [Int]
72
+ // someInts 现在是一个空数组, 但它仍是 [Int] 类型的
73
73
```
74
74
75
75
<!--
@@ -84,13 +84,13 @@ someInts = []
84
84
```
85
85
-->
86
86
87
- ### 创建具有默认值的数组
87
+ ### 使用默认值创建数组
88
88
89
- Swift 的 ` Array ` 类型还提供了一个构造器,用于创建特定大小的数组,其所有值都设置为相同的默认值。您向此初始值设定项传递适当类型的默认值 (称为 ` repeating ` ):以及该值在新数组中重复的次数(称为 ` count ` ):
89
+ Swift 的 ` Array ` 类型还提供了一个构造器,用于创建特定大小的数组,其所有值都设置为相同的默认值。您向此构造器传递适当类型的默认值 (称为 ` repeating ` ):以及该值在新数组中重复的次数(称为 ` count ` ):
90
90
91
91
``` swift
92
92
var threeDoubles = Array (repeating : 0.0 , count : 3 )
93
- // threeDoubles is of type [Double], and equals [0.0, 0.0, 0.0]
93
+ // threeDoubles 的类型是 [Double],并且等于 [0.0, 0.0, 0.0]
94
94
```
95
95
96
96
<!--
@@ -103,16 +103,16 @@ var threeDoubles = Array(repeating: 0.0, count: 3)
103
103
```
104
104
-->
105
105
106
- ### 通过将两个数组相加来创建数组
106
+ ### 通过合并两个数组创建一个新数组
107
107
108
108
您可以通过使用加法运算符 ` (+) ` 将两个具有兼容类型的现有数组相加来创建新数组。新数组的类型是从您相加的两个数组的类型推断出来的:
109
109
110
110
``` swift
111
111
var anotherThreeDoubles = Array (repeating : 2.5 , count : 3 )
112
- // anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
112
+ // anotherThreeDoubles 的类型是 [Double],并且等于 [2.5, 2.5, 2.5]
113
113
114
114
var sixDoubles = threeDoubles + anotherThreeDoubles
115
- // sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
115
+ // sixDoubles 被推断为 [Double] 类型,并且等于 [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
116
116
```
117
117
118
118
<!--
@@ -142,9 +142,9 @@ var sixDoubles = threeDoubles + anotherThreeDoubles
142
142
Likewise I'm holding off writing about it until NewArray lands.
143
143
-->
144
144
145
- ### 使用 Array Literal 创建 Array
145
+ ### 使用数组字面量创建数组
146
146
147
- 您还可以使用 ** 数组文本 ** 初始化数组 ,这是将一个或多个值写入数组集合的简写方法。数组文字以值列表的形式写入 ,用逗号分隔,用一对方括号括起来:
147
+ 您还可以使用 ** 数组字面量 ** 来初始化数组 ,这是将一个或多个值写入数组集合的简写方法。数组字面量以值列表的形式写入 ,用逗号分隔,用一对方括号括起来:
148
148
149
149
``` swift
150
150
[< #value 1 #> , < #value 2 #> , < #value 3 #> ]
@@ -166,13 +166,13 @@ var shoppingList: [String] = ["Eggs", "Milk"]
166
166
```
167
167
-->
168
168
169
- ` shoppingList ` 变量声明为 “字符串值数组”,作为 ` [String] ` 写入。由于此特定数组已指定 ` String ` 的值类型,因此仅允许存储 ` String ` 值 。在这里,` shoppingList ` 数组使用两个 ` String ` 值(` “ Eggs” ` 和 ` “ Milk” ` )进行初始化,这些值将被写入数组文本中 。
169
+ ` shoppingList ` 变量被声明为 “字符串值数组”,写作 ` [String] ` 。由于该数组指定了值类型为 ` String ` ,因此它只允许存储 ` String ` 类型的值 。在这里,` shoppingList ` 数组通过数组字面量初始化了两个 ` String ` 值(` " Eggs" ` 和 ` " Milk" ` ) 。
170
170
171
- > 注意: ` shoppingList ` 数组被声明为变量(使用 ` var ` 声明 )而不是常量(使用 ` let ` 声明 ),因为在下面的示例中,更多的商品要被添加到购物清单中。
171
+ > 注意: ` shoppingList ` 数组被声明为变量(使用 ` var ` 关键字 )而不是常量(使用 ` let ` 关键字 ),因为在下面的示例中,更多的商品要被添加到购物清单中。
172
172
173
- 在本例中,数组文本包含两个 ` String ` 值,不包含任何其他值 。这与 ` shoppingList ` 变量的声明类型(只能包含 ` String ` 值的数组)匹配,因此允许分配数组文本作为使用两个初始项初始化 ` shoppingList ` 的一种方式 。
173
+ 在这个例子中,数组字面量只包含两个 ` String ` 值,且没有其他内容 。这与 ` shoppingList ` 变量的声明类型(一个只能包含 ` String ` 值的数组)相匹配,因此允许使用这个数组字面量来初始化 ` shoppingList ` ,并包含两个初始项目 。
174
174
175
- 多亏了 Swift 的类型推断,如果您使用包含相同类型值的数组字面量来初始化数组,则不必编写数组的类型 。` shoppingList ` 的初始化可以改为以更短的形式编写 :
175
+ 得益于 Swift 的类型推断功能,如果您使用包含相同类型值的数组字面量进行初始化,则无需显式地写出数组的类型 。` shoppingList ` 的初始化可以改为以更简短的形式编写 :
176
176
177
177
``` swift
178
178
var shoppingList = [" Eggs" , " Milk" ]
@@ -192,11 +192,11 @@ var shoppingList = ["Eggs", "Milk"]
192
192
193
193
您可以通过数组的方法和属性或使用下标语法来访问和修改数组。
194
194
195
- 要找出数组中的项数,请检查其 read-only ` count ` 属性 :
195
+ 要找出数组中的项数,可以检查其只读属性 ` count ` :
196
196
197
197
``` swift
198
198
print (" The shopping list contains \( shoppingList.count ) items." )
199
- // Prints "The shopping list contains 2 items."
199
+ // 打印 "The shopping list contains 2 items."
200
200
```
201
201
202
202
<!--
@@ -216,7 +216,7 @@ if shoppingList.isEmpty {
216
216
} else {
217
217
print (" The shopping list isn't empty." )
218
218
}
219
- // Prints "The shopping list isn't empty."
219
+ // 打印 "The shopping list isn't empty."
220
220
```
221
221
222
222
<!--
@@ -232,11 +232,11 @@ if shoppingList.isEmpty {
232
232
```
233
233
-->
234
234
235
- 您可以通过调用数组的 ` append(_:) ` 方法将新项添加到数组的末尾 :
235
+ 您可以通过调用数组的 ` append(_:) ` 方法将新元素添加到数组的末尾 :
236
236
237
237
``` swift
238
238
shoppingList.append (" Flour" )
239
- // shoppingList now contains 3 items, and someone is making pancakes
239
+ // shoppingList 现在包含 3 个项目,而有人正在做煎饼
240
240
```
241
241
242
242
<!--
@@ -249,13 +249,13 @@ shoppingList.append("Flour")
249
249
```
250
250
-->
251
251
252
- 或者使用加法赋值运算符 (` += ` ) 附加一个或多个兼容项的数组 :
252
+ 或者,可以使用加法赋值运算符 (` += ` )将一个或多个兼容项的数组追加到现有数组中 :
253
253
254
254
``` swift
255
255
shoppingList += [" Baking Powder" ]
256
- // shoppingList now contains 4 items
256
+ // shoppingList 现在包含 4 个项目
257
257
shoppingList += [" Chocolate Spread" , " Cheese" , " Butter" ]
258
- // shoppingList now contains 7 items
258
+ // shoppingList 现在包含 7 个项目
259
259
```
260
260
261
261
<!--
@@ -275,7 +275,7 @@ shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
275
275
276
276
``` swift
277
277
var firstItem = shoppingList[0 ]
278
- // firstItem is equal to "Eggs"
278
+ // firstItem 的值为 "Eggs"
279
279
```
280
280
281
281
<!--
@@ -483,7 +483,7 @@ for (index, value) in shoppingList.enumerated() {
483
483
484
484
> 注意: Swift 的 ` Set ` 类型桥接到 Foundation 的 ` NSSet ` 类。
485
485
>
486
- > 有关将 ` Set ` 与 Foundation 和 Cocoa 一起使用的更多信息,请参见 [ Bridging Between Set and NSSet] ( https://developer.apple.com/documentation/swift/set#2845530 ) .
486
+ > 有关将 ` Set ` 与 Foundation 和 Cocoa 一起使用的更多信息,请参阅 [ Bridging Between Set and NSSet] ( https://developer.apple.com/documentation/swift/set#2845530 ) .
487
487
488
488
<!--
489
489
TODO: Add note about performance characteristics of contains on sets as opposed to arrays?
0 commit comments