Elixir - Daftar dan Tupel
Daftar (Tertaut)
Daftar tertaut adalah daftar heterogen elemen yang disimpan di lokasi berbeda dalam memori dan dilacak dengan menggunakan referensi. Daftar tertaut adalah struktur data yang terutama digunakan dalam pemrograman fungsional.
Elixir menggunakan tanda kurung siku untuk menentukan daftar nilai. Nilai bisa dari jenis apa pun -
[1, 2, true, 3]
Ketika Elixir melihat daftar nomor ASCII yang dapat dicetak, Elixir akan mencetaknya sebagai daftar karakter (secara harfiah adalah daftar karakter). Setiap kali Anda melihat nilai di IEx dan Anda tidak yakin apa itu, Anda dapat menggunakani berfungsi untuk mengambil informasi tentangnya.
IO.puts([104, 101, 108, 108, 111])
Karakter di atas dalam daftar semuanya dapat dicetak. Ketika program di atas dijalankan, menghasilkan hasil sebagai berikut -
hello
Anda juga dapat menentukan daftar dengan cara lain, menggunakan tanda kutip tunggal -
IO.puts(is_list('Hello'))
Ketika program di atas dijalankan, menghasilkan hasil sebagai berikut -
true
Ingatlah bahwa representasi yang dikutip tunggal dan yang dikutip ganda tidak setara di Elixir karena diwakili oleh jenis yang berbeda.
Panjang Daftar
Untuk mencari panjang list, kita menggunakan fungsi length seperti pada program berikut -
IO.puts(length([1, 2, :true, "str"]))
Program di atas menghasilkan hasil sebagai berikut -
4
Rangkaian dan Pengurangan
Dua daftar dapat digabungkan dan dikurangi menggunakan ++ dan --operator. Perhatikan contoh berikut untuk memahami fungsinya.
IO.puts([1, 2, 3] ++ [4, 5, 6])
IO.puts([1, true, 2, false, 3, true] -- [true, false])
Ini akan memberi Anda string gabungan di kasus pertama dan string dikurangi di kasus kedua. Program di atas menghasilkan hasil sebagai berikut -
[1, 2, 3, 4, 5, 6]
[1, 2, 3, true]
Kepala dan Ekor Daftar
Kepala adalah elemen pertama dari daftar dan ekor adalah sisa daftar. Mereka bisa diambil dengan fungsihd dan tl. Mari kita tetapkan daftar ke variabel dan ambil kepala dan ekornya.
list = [1, 2, 3]
IO.puts(hd(list))
IO.puts(tl(list))
Ini akan memberi kita kepala dan ekor dari daftar sebagai keluaran. Program di atas menghasilkan hasil sebagai berikut -
1
[2, 3]
Note - Mendapatkan kepala atau ekor dari daftar kosong adalah kesalahan.
Fungsi Daftar lainnya
Pustaka standar Elixir menyediakan banyak fungsi untuk menangani daftar. Kami akan melihat beberapa di antaranya di sini. Anda dapat melihat sisanya di sini . Daftar .
S. tidak. | Nama Fungsi dan Deskripsi |
---|---|
1 | delete(list, item) Menghapus item yang diberikan dari daftar. Menampilkan daftar tanpa item. Jika item muncul lebih dari sekali dalam daftar, hanya kemunculan pertama yang dihapus. |
2 | delete_at(list, index) Menghasilkan daftar baru dengan menghapus nilai pada indeks yang ditentukan. Indeks negatif menunjukkan offset dari akhir daftar. Jika indeks di luar batas, daftar asli dikembalikan. |
3 | first(list) Mengembalikan elemen pertama dalam daftar atau nihil jika daftar kosong. |
4 | flatten(list) Meratakan daftar daftar bersarang yang diberikan. |
5 | insert_at(list, index, value) Menampilkan daftar dengan nilai yang disisipkan pada indeks yang ditentukan. Perhatikan bahwa indeks dibatasi pada panjang daftar. Indeks negatif menunjukkan offset dari akhir daftar. |
6 | last(list) Mengembalikan elemen terakhir dalam daftar atau nihil jika daftar kosong. |
Tuple
Tupel juga merupakan struktur data yang menyimpan sejumlah struktur lain di dalamnya. Tidak seperti daftar, mereka menyimpan elemen dalam blok memori yang berdekatan. Ini berarti mengakses elemen tupel per indeks atau mendapatkan ukuran tupel adalah operasi yang cepat. Indeks dimulai dari nol.
Elixir menggunakan tanda kurung kurawal untuk mendefinisikan tupel. Seperti daftar, tupel dapat memiliki nilai apa pun -
{:ok, "hello"}
Panjang Tupel
Untuk mendapatkan panjang tupel, gunakan tuple_size berfungsi seperti pada program berikut -
IO.puts(tuple_size({:ok, "hello"}))
Program di atas menghasilkan hasil sebagai berikut -
2
Menambahkan Nilai
Untuk menambahkan nilai ke tupel, gunakan fungsi Tuple.append -
tuple = {:ok, "Hello"}
Tuple.append(tuple, :world)
Ini akan membuat dan mengembalikan tupel baru: {: ok, "Hello",: world}
Memasukkan Nilai
Untuk memasukkan nilai pada posisi tertentu, kita dapat menggunakan Tuple.insert_at fungsi atau put_elemfungsi. Pertimbangkan contoh berikut untuk memahami hal yang sama -
tuple = {:bar, :baz}
new_tuple_1 = Tuple.insert_at(tuple, 0, :foo)
new_tuple_2 = put_elem(tuple, 1, :foobar)
Perhatikan itu put_elem dan insert_atmengembalikan tupel baru. Tupel asli yang disimpan dalam variabel tupel tidak dimodifikasi karena tipe data Elixir tidak dapat diubah. Dengan tidak dapat diubah, kode Elixir lebih mudah untuk dipikirkan karena Anda tidak perlu khawatir jika kode tertentu mengubah struktur data Anda.
Tupel vs. Daftar
Apa perbedaan antara List dan Tuple?
Daftar disimpan dalam memori sebagai daftar tertaut, yang berarti bahwa setiap elemen dalam daftar menyimpan nilainya dan menunjuk ke elemen berikut hingga akhir daftar tercapai. Kami menyebut setiap pasangan nilai dan menunjuk sel kontra. Ini berarti mengakses panjang daftar adalah operasi linier: kita perlu melintasi seluruh daftar untuk mengetahui ukurannya. Memperbarui daftar dengan cepat selama kita menyiapkan elemen.
Tupel, di sisi lain, disimpan berdekatan dalam memori. Ini berarti mendapatkan ukuran tupel atau mengakses elemen dengan indeks dengan cepat. Namun, memperbarui atau menambahkan elemen ke tupel mahal karena memerlukan penyalinan seluruh tupel dalam memori.