# 1. Sử dụngArray
chỉ số dưới với phạm vi
Với Swift 5, khi bạn viết…
let newNumbers = numbers[0...position]
… newNumbers
Không thuộc loại Array<Int>
nhưng thuộc loại ArraySlice<Int>
. Đó là bởi vì Array
nó subscript(_:)
trả về một ArraySlice<Element>
cái mà theo Apple, thể hiện một cái nhìn về bộ nhớ của một số mảng lớn hơn.
Bên cạnh đó, Swift cũng cung cấp Array
một trình khởi tạo có tên init(_:)
cho phép chúng ta tạo một mảng mới từ sequence
(bao gồm ArraySlice
).
Do đó, bạn có thể sử dụng subscript(_:)
với init(_:)
để lấy một mảng mới từ n phần tử đầu tiên của một mảng:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array[0..<3] // using Range
//let arraySlice = array[0...2] // using ClosedRange also works
//let arraySlice = array[..<3] // using PartialRangeUpTo also works
//let arraySlice = array[...2] // using PartialRangeThrough also works
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
# 2. Sử dụng Array
's prefix(_:)
phương pháp
Swift cung cấp một prefix(_:)
phương thức cho các kiểu tuân theo Collection
giao thức (bao gồm cả Array
). prefix(_:)
có khai báo sau:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
Trả về một dãy con, có độ dài lên đến maxLength, chứa các phần tử ban đầu.
Apple cũng tuyên bố:
Nếu độ dài tối đa vượt quá số phần tử trong tập hợp, kết quả sẽ chứa tất cả các phần tử trong tập hợp.
Do đó, để thay thế cho ví dụ trước, bạn có thể sử dụng mã sau để tạo một mảng mới từ các phần tử đầu tiên của một mảng khác:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array.prefix(3)
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]