結構
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。