#1。Array範囲付き添え字の使用
Swift 5では、次のように記述します…
let newNumbers = numbers[0...position]
… newNumbersはタイプではありませんArray<Int>が、タイプArraySlice<Int>です。Appleによると、Arrays subscript(_:)はを返すのでArraySlice<Element>、より大きな配列のストレージに対する見方を示しているためです。
さらに、SwiftはArray、(を含む)init(_:)から新しい配列を作成できるようにすると呼ばれる初期化子も提供します。sequenceArraySlice
したがって、subscript(_:)with init(_:)を使用して、配列の最初のn個の要素から新しい配列を取得できます。
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。Arrayのprefix(_:)方法を使用する
Swiftは、プロトコル(を含む)にprefix(_:)準拠する型のメソッドを提供しCollectionますArray。prefix(_:)次の宣言があります:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
初期要素を含む、最大長がmaxLengthのサブシーケンスを返します。
アップルも述べています:
最大長がコレクション内の要素数を超える場合、結果にはコレクション内のすべての要素が含まれます。
したがって、前の例の代わりに、次のコードを使用して、別の配列の最初の要素から新しい配列を作成できます。
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]