结构
Slice
另一个集合的元素子序列的视图。
声明
@frozen struct Slice<Base> where Base : Collection
概述
切片存储基本集合以及视图的开始和结束索引。它不会将集合中的元素复制到单独的存储中。因此,创建切片具有 O(1) 复杂度。
切片股票指数
切片的索引可以与基本集合的索引互换使用。切片的元素位于切片和基本集合中的相同索引下,只要自切片创建以来集合和切片都没有发生突变。
例如,假设您有一个数组,其中包含一个会话期间每个类的缺勤次数。
var absences = [0, 2, 0, 4, 0, 3, 1, 0]
你的任务是找出下半场缺勤最多的一天。要查找相关日期的索引,请执行以下步骤:
-
创建包含后半天的
absences
数组的切片。 -
使用
max(by:)
方法确定缺勤次数最多的一天的索引。 -
使用在步骤 2 中找到的原始
absences
数组上的索引打印结果。
以下是这些步骤的实现:
let secondHalf = absences.suffix(absences.count / 2)
if let i = secondHalf.indices.max(by: { secondHalf[$0] < secondHalf[$1] }) {
print("Highest second-half absences: \(absences[i])")
}
// Prints "Highest second-half absences: 3"
切片继承语义
切片继承其基本集合的值或引用语义。也就是说,如果 Slice
实例被包装在具有值语义的可变集合(例如数组)周围,则改变原始集合将触发该集合的副本,并且不会影响存储在切片内的基本集合。
例如,如果您将 absences
数组的最后一个元素从 0
更新为 2
,则 secondHalf
切片保持不变。
absences[7] = 2
print(absences)
// Prints "[0, 2, 0, 4, 0, 3, 1, 2]"
print(secondHalf)
// Prints "[0, 3, 1, 0]"
仅将切片用于瞬态计算。切片可能包含对较大集合的整个存储的引用,而不仅仅是它所呈现的部分,即使在基本集合的生命周期结束之后也是如此。 Long-term 切片的存储因此可能会延长无法再访问的元素的生命周期,这可能会错误地显示为内存泄漏。
可用版本
iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+
相关用法
- Swift Slice endIndex用法及代码示例
- Swift Slice reduce(into:_:)用法及代码示例
- Swift Slice contains(_:)用法及代码示例
- Swift Slice removeAll(where:)用法及代码示例
- Swift Slice +(_:_:)用法及代码示例
- Swift Slice lastIndex(where:)用法及代码示例
- Swift Slice removeFirst()用法及代码示例
- Swift Slice suffix(_:)用法及代码示例
- Swift Slice starts(with:)用法及代码示例
- Swift Slice reduce(_:_:)用法及代码示例
- Swift Slice insert(_:at:)用法及代码示例
- Swift Slice isEmpty用法及代码示例
- Swift Slice sorted()用法及代码示例
- Swift Slice split(separator:maxSplits:omittingEmptySubsequences:)用法及代码示例
- Swift Slice dropLast(_:)用法及代码示例
- Swift Slice sorted(by:)用法及代码示例
- Swift Slice partition(by:)用法及代码示例
- Swift Slice last(where:)用法及代码示例
- Swift Slice joined(separator:)用法及代码示例
- Swift Slice base用法及代码示例
- Swift Slice enumerated()用法及代码示例
- Swift Slice insert(contentsOf:at:)用法及代码示例
- Swift Slice prefix(upTo:)用法及代码示例
- Swift Slice shuffle(using:)用法及代码示例
- Swift Slice removeSubrange(_:)用法及代码示例
注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Slice。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。