Bagaimana di dunia Anda mendapatkan hanya elemen di indeks saya dari Daftar di scala?
Saya mencoba get(i)
, dan [i]
- tidak ada yang berhasil. Googling hanya mengembalikan cara "menemukan" elemen dalam daftar. Tapi saya sudah tahu indeks elemen!
Berikut adalah kode yang tidak dikompilasi:
def buildTree(data: List[Data2D]):Node ={
if(data.length == 1){
var point:Data2D = data[0] //Nope - does not work
}
return null
}
Melihat api Daftar tidak membantu, karena mataku hanya menyeberang.
Jawaban:
Gunakan tanda kurung:
Tetapi Anda tidak benar-benar ingin melakukannya dengan daftar sangat sering, karena daftar tertaut membutuhkan waktu untuk dilintasi. Jika Anda ingin mengindeks ke dalam koleksi, gunakan
Vector
(tidak dapat diubah) atauArrayBuffer
(dapat diubah) atau mungkinArray
(yang hanya merupakan array Java, kecuali lagi Anda mengindeks ke dalamnya dengan(i)
bukan[i]
).sumber
ArrayBuffer
bekerja sepertiArrayList
.Vector
berfungsi seperti yang tidakArrayList
dapat diubah - Anda dapat membaca, tetapi Anda tidak dapat menulis tanpa membuat yang baru.ArrayBuffer
keIndexedSeq
menggunakan.toIndexedSeq
;IndexedSeq
adalah tipe yang lebih umum. (Dalam hal ini, ternyata benar-benar diimplementasikan sebagai aVector
.)IndexedSeq
Adalah supertype koleksi yang masuk akal untuk diindeks. Perhatikan juga bahwa Anda dapat melakukannyaVector() ++ myArrayBuffer
, yang akan berfungsi untuk hampir semua koleksi (di kedua sisi).++
membangun koleksi baru dari dua yang Anda tentukan, mempertahankan jenis yang di sebelah kiri.Vector()
adalah vektor kosong, sehingga akan menghasilkan apa yang Anda inginkan.Lebih aman adalah untuk digunakan
lift
sehingga Anda dapat mengekstraksi nilai jika ada dan gagal jika tidak.Ini akan mengembalikan Tidak Ada jika daftar tidak cukup panjang untuk menyediakan elemen itu, dan Beberapa (nilai) jika ya.
Setiap kali Anda melakukan operasi yang mungkin gagal dengan cara ini, sangat bagus untuk menggunakan Opsi dan mendapatkan sistem tipe untuk membantu memastikan Anda menangani kasus di mana elemen tidak ada.
Penjelasan:
Ini berfungsi karena Daftar
apply
(yang hanyal(index)
berupa tanda kurung, misalnya ) seperti fungsi parsial yang didefinisikan di mana pun daftar memiliki elemen. TheList.lift
Metode ternyata parsialapply
fungsi (fungsi yang hanya ditetapkan untuk beberapa masukan) ke dalam fungsi normal (didefinisikan untuk setiap masukan) oleh dasarnya membungkus hasilnya dalam Option.sumber
Mengapa tanda kurung?
Berikut adalah kutipan dari pemrograman buku di scala .
Berikut adalah beberapa contoh cara menarik elemen tertentu (elem pertama dalam kasus ini) menggunakan gaya pemrograman fungsional.
sumber
Silakan gunakan tanda kurung () untuk mengakses elemen daftar list_name (indeks)
sumber
Ini adalah cara yang disukai untuk mengakses data Daftar melalui indeks saat ini:
Tetapi seperti Rex Kerr yang diuraikan di atas: Jika Anda menggunakan indeks, Anda harus mempertimbangkan untuk menggunakan Vektor daripada Daftar.
sumber