Bagaimana saya bisa melakukan sesuatu seperti ini? Ambil n elemen pertama dari sebuah array:
newNumbers = numbers[0..n]
Saat ini mendapatkan kesalahan berikut:
error: could not find an overload for 'subscript' that accepts the supplied arguments
EDIT:
Inilah fungsi yang saya kerjakan.
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = numbers[0...position]
return newNumbers
}
Slice
keArray
, melainkan menciptakan sebuah array baru dari sepotong. Seorang pemeran akan menggunakanas
operator:numbers as Array
yang akan menghasilkan kesalahan...
berubah menjadi..<
; tiga titik (elipsis) tetap sama. Terima kasih atas pengingatnya; Saya memperbarui jawabannya.# 1. Menggunakan
Array
subskrip dengan rentangDengan Swift 5, saat Anda menulis…
…
newNumbers
Bukanlah tipeArray<Int>
tapi tipeArraySlice<Int>
. Itu karenaArray
'ssubscript(_:)
kembali sebuahArraySlice<Element>
itu, menurut Apple, hadiah pandangan ke penyimpanan beberapa array yang lebih besar.Selain itu Swift juga menyediakan
Array
sebuah penginisialisasi bernamainit(_:)
yang memungkinkan kita membuat array baru dari asequence
(termasukArraySlice
).Oleh karena itu, Anda dapat menggunakan
subscript(_:)
withinit(_:)
untuk mendapatkan array baru dari n elemen pertama dari sebuah array:# 2. Menggunakan
Array
'sprefix(_:)
metodeSwift menyediakan
prefix(_:)
metode untuk tipe yang sesuai denganCollection
protokol (termasukArray
).prefix(_:)
memiliki deklarasi berikut:Apple juga menyatakan:
Oleh karena itu, sebagai alternatif dari contoh sebelumnya, Anda dapat menggunakan kode berikut untuk membuat array baru dari elemen pertama dari array lain:
sumber
sumber
Satu lagi varian menggunakan
extension
dan nama argumenrange
Ekstensi ini menggunakan
Range
danClosedRange
Tes:
sumber
Array cara fungsional:
berkisar:
Keuntungan dari metode ini adalah penerapannya aman.
sumber