排序、搜索与切片
学习 sorted()、sort()、firstIndex(of:)、prefix、suffix 和 ArraySlice
排序、搜索与切片 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
欢迎
Swift 数组提供了丰富的排序、查找和切片算法。掌握这些算法可以减少手写循环,生成更简洁、更快速的代码。
排序方法对比
```swift
let nums = [3,1,4,1,5,9]
let sorted = nums.sorted() // new array, nums unchanged
var mutable = [3,1,4]
mutable.sort() // in-place sort
```
`sorted()` 可用于 `let` 数组;`sort()` 要求数组使用 `var` 声明。
自定义排序顺序
```swift
let words = ["banana","apple","cherry"]
let alpha = words.sorted() // ascending
let rev = words.sorted(by: >) // descending
let byLen = words.sorted { $0.count < $1.count } // by length
```
按条件查找首个和末个元素
```swift
let nums = [4, 7, 2, 9, 1]
let first = nums.first { $0 > 5 } // Optional(7)
let last = nums.last { $0 > 5 } // Optional(9)
```
这比手动编写循环更好,因为找到第一个匹配项后就会停止。
使用分区操作进行二分查找
Swift 标准库使用分区操作来高效地进行 O(n) 分区:
```swift
var nums = [3, 1, 4, 1, 5, 9, 2]
let pivotIdx = nums.partition { $0 >= 5 }
// nums is now [...<5 values..., 5,9] and pivotIdx is the split point
```
数组切片:前缀与后缀
```swift
let arr = [10,20,30,40,50]
let first3 = arr.prefix(3) // ArraySlice [10,20,30]
let last2 = arr.suffix(2) // ArraySlice [40,50]
let mid = arr[1...3] // ArraySlice [20,30,40]
```
切片是视图,与原数组共享存储空间。
将切片转换为数组
```swift
let slice = arr.prefix(3)
let copy = Array(slice) // independent [Int] copy
```
如果需要在源数组的生命周期之外存储切片,请始终将其转换为 `Array`。
丢弃元素与从首尾丢弃
```swift
let arr = [1,2,3,4,5]
let d1 = arr.dropFirst() // [2,3,4,5]
let d2 = arr.dropLast(2) // [1,2,3]
let d3 = arr.drop { $0 < 3 } // [3,4,5] — drop while condition holds
```
最小值与最大值
```swift
let scores = [88, 95, 70, 82]
print(scores.min()!) // 70
print(scores.max()!) // 95
let minByLen = ["cat","elephant","ox"].min { $0.count < $1.count }
// "ox"
```
包含检查与 allSatisfy
```swift
let nums = [2, 4, 6, 8]
print(nums.allSatisfy { $0 % 2 == 0 }) // true
print(nums.contains { $0 > 10 }) // false
```
`allSatisfy` 和 `contains(where:)` 都会在能够确定结果时提前停止。
快速检查
哪种方法会以 `ArraySlice` 的形式返回数组的前 N 个元素?
回顾
要点总结:
• `sorted()` → 返回新数组;`sort()` → 就地修改数组
• `first(where:)` / `last(where:)`——查找元素
• `prefix`、`suffix`、`[range]`——切片,不会复制
• `drop(while:)`、`dropFirst`、`dropLast`——从两端移除元素
• `min()`、`max()`、`allSatisfy`、`contains(where:)`
下一课:数组的映射、筛选与归并。
常见问题解答
「排序、搜索与切片」课时是免费的吗?
是的 — 「排序、搜索与切片」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「排序、搜索与切片」这节课中我会学到什么?
学习 sorted()、sort()、firstIndex(of:)、prefix、suffix 和 ArraySlice 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「排序、搜索与切片」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。