0Pricing
Swift Academy · 课时

将切片转换回数组

将切片实体化为独立数组。

将切片转换回数组 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

切片不是数组

ArraySlice 是不同于 Array 的独立类型。许多接口需要具体的 Array,因此您通常需要进行转换。

let original = [1, 2, 3, 4, 5]
let slice = original[1..<4]
print(type(of: slice))

数组(slice)

将切片包装在 Array(...) 初始化器中,即可创建一个包含复制元素且索引从零开始的新独立数组。

let original = [10, 20, 30, 40, 50]
let slice = original[2..<5]
let array = Array(slice)
print(array)
print(type(of: array))

索引重置为零

转换后,新数组会从 0 开始重新编号;切片则会保留父数组的索引。

let original = [1, 2, 3, 4, 5]
let slice = original[3..<5]
let copy = Array(slice)
print("slice start:", slice.startIndex)
print("array start:", copy.startIndex)

转换会复制存储空间

转换会强制执行复制。新数组不再与父数组共享存储空间,因此修改它不会影响 original。

let original = [1, 2, 3, 4]
var copy = Array(original[1..<3])
copy[0] = 999
print("original:", original)
print("copy:", copy)

从函数返回数组

当函数返回数组的一部分时,请转换切片,以便调用者获得普通的 Array。

func firstThree(of nums: [Int]) -> [Int] {
    return Array(nums.prefix(3))
}
print(firstThree(of: [9, 8, 7, 6, 5]))

传递给数组参数

如果接口参数的类型是 [Int],则必须先转换切片才能传入。

func total(_ values: [Int]) -> Int {
    return values.reduce(0, +)
}
let data = [1, 2, 3, 4, 5]
let result = total(Array(data[1..<4]))
print(result)

何时无需转换

如果函数接受通用的 Sequence 或 Collection,您可以直接传入切片,无需进行转换。

func describe<S: Sequence>(_ s: S) where S.Element == Int {
    print(Array(s))
}
let arr = [2, 4, 6, 8]
describe(arr[1..<3])

内存权衡

切片可以避免复制,并让父级存储保持存活。如果长时间持有巨大数组中的一小段切片,请将其转换为数组,以便释放较大的缓冲区。

let huge = Array(1...1000)
let keep = Array(huge[0..<3]) // small independent copy
print(keep)

转换为集合

您还可以将切片传入其他集合初始化器,例如 Set。

let arr = [1, 2, 2, 3, 3, 3]
let uniqueTail = Set(arr[2..<6])
print(uniqueTail.sorted())

往返转换

先切片、再转换、然后再次切片完全没有问题。每次转换都是显式且可预测的。

let arr = [10, 20, 30, 40, 50]
let a = Array(arr[1..<4])
let b = Array(a[0..<2])
print(a)
print(b)

最佳实践

计算过程中请继续使用切片,只在存储或返回结果的边界处转换为 Array。

let arr = [3, 1, 4, 1, 5, 9, 2]
let top3 = Array(arr.sorted(by: >)[0..<3])
print(top3)

快速检查

测试切片转换。

回顾

使用 Array(slice) 可将 ArraySlice 转换为具有从零开始的索引和独立存储的数组。请在应用程序接口边界处进行转换;计算过程中保留切片,以避免额外复制。

let s = [1, 2, 3, 4, 5][2..<5]
let a = Array(s)
print(a, a.startIndex)

常见问题解答

「将切片转换回数组」课时是免费的吗?

是的 — 「将切片转换回数组」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「将切片转换回数组」这节课中我会学到什么?

将切片实体化为独立数组。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「将切片转换回数组」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用范围创建切片
  2. ArraySlice 的索引语义
  3. 将切片转换回数组
  4. prefix、suffix 与 dropFirst
← 返回 Swift Academy