Operasi pada Array di Ruby
posted to Ruby on 16 December 2017
Array atau Larik merupakan salah satu bentuk struktur data pada Ruby yang dapat menyimpan banyak data, disebut dengan elemen, dengan suatu nama yang sama dan menempati tempat di memori yang berurutan (kontigu) serta bertipe data sama. Pada Ruby array dapat berisi berbagai macam tipe data seperti angka, string, dan object Ruby lainnya. Ketika kita memiliki data dalam bentuk array, kita dapat melakukan beberapa operasi seperti mengurutkan, menghapus duplikasi, membalik urutan, mengambil sebagian dari array, melakukan transformasi data, dan menjadikan sebuah array kedalam satu nilai tertentu.
Pada kesempatan kali ini kita akan melakukan eksplorasi method yang bisa kita gunakan dalam melakukan operasi pada array. Beberapa method yang akan kita gunakan mungkin akan terasa baru, seperti method yang menggunakan tanda seru (!) atau method dengan tanda tanya(?). Untuk method dengan tanda seru (!), berarti method tersebut memiliki efek samping seperti merubah array asli tanpa melakukan proses penyalinan atau memunculkan exception. Sedangkan method dengan tanda tanya (?), menunjukkan bahwa method tersebut mengembalikan nilai boolean.
Akses Elemen pada Array
Seperti pada bahasa Python, array pada Ruby dapat diakses langsung dengan menggunakan nomor indeksnya(dimulai dari 0) seperti berikut:
languages = ["Ruby", "Javascript", "Python"]
languages[0] # "Ruby"
languages[1] # "Javascript"
languages[2] # "Python"
Selain itu kita dapat menggunakan method .first
dan juga .last
untuk mengakses elemen pertama dan terakhir dari sebuah array seperti berikut:
languages = ["Ruby", "Javascript", "Python"]
languages.first # "Ruby"
languages.last # "Python"
Jika kita mengakses indeks yang tidak ada, kita akan mendapatkan nil
. Namun jika ingin memperoleh nilai galat, kita dapat menggunakan method .fetch
seperti berikut:
languages = ["Ruby", "Javascript", "Python"]
languages.fetch(42) # IndexError: index 42 outside of array bounds: -3...3
languages.fetch(42, "None") # "None"
Mengambil Beberapa Elemen dari Array
Ada saatnya kita perlu mengambil beberapa elemen dari sebuah array, hal ini dapat dilakukan dengan menentukan nilai awal dari indeks array dilanjutkan dengan jumlah elemen yang kita perlukan seperti berikut:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages[1,2] # ["Javascript", "Python"]
Pada potongan kode di atas, kita memulai dari indeks 1
, berisi "Javascript"
, dan kita mengambil 2
elemen, dan kita mendapatkan array baru berisi "Javascript"
dan "Python"
. Selain menggunakan metode tersebut kita dapat menggunakan method .slice
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.slice(1,2) # ["Javascript", "Python"]
Yang perlu diperhatikan adalah ketika menggunakan method .slice
maka kita akan mendapatkan array baru tanpa merubah array asli. Namun jika kita menggunakan method .slice!
maka array asli akan berubah.
Method lain yang bisa kita gunakan adalah .take
, dimana method ini akan memberikan kita jumlah elemen yang kita perlukan dimulai dari indeks pertama array seperti berikut:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.take(2) # ["Ruby", "Javascript"]
Mendapat Nilai Acak dari Array
Terkadang kita memerlukan nilai acak untuk menentukan hasil undian, dengan menggunakan array kita dapat menggunakan nilai awal dan akhir indeks untuk kemudian menghasilkan nilai acak. Namun cara termudah adalah dengan menggunakan method .sample
seperti berikut:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.sample # Python
languages.sample(2) # ["Ruby", "Javascript"]
Method .sample
juga menerima argumen untuk menentukan jumlah elemen acak yang kita perlukan.
Pencarian dan Penyaringan Array
Ketika mencari sebuah elemen dari array umumnya kita akan melakukan iterasi pada array hingga menemukan elemen yang dimaksud. Kita dapat menggunakan method .include?
, yang menghasilkan nilai boolean
ketika data yang dimaksud ditemukan atau tidak.
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.include? "Haskell" # true
languages.include? "Elixir" # false
Perlu diketahui, method .include?
membutuhkan nilai yang benar-benar cocok, kita tidak dapat melakukan pencarian dengan nilai parsial seperti berikut:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.include? "Java" # false
languages.include? "Rub" # false
languages.include? "py" # false
Method lainnya adalah .find
, dimana method ini akan mengembalikan nilai pertama muncul yang sesuai dengan spesifikasi yang kita berikan, berikut contoh penggunaan .find
:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.find {|language| language.include?("o")} # "Python"
Selain .find
kita juga dapat menggunakan .select
untuk menghasilkan array baru berisi hasil yang sesuai dengan spesifikasi yang kita berikan, berikut contoh:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.select {|language| language.include?("a")}
# ["Javascript", "Haskell"]
Sedangkan untuk menghasilkan array baru yang tidak sesuai spesifikas, kita dapat menggunakan method .reject
, berikut contoh:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.reject {|language| language.include("a")}
# ["Ruby", "Python"]
Sama seperti sebelumnya method .select
dan .reject
juga menghasilkan array baru tanpa merubah array asli. Namun .select!
dan .reject!
mengubah array asli.
Mengurutkan Data pada Array
Proses pengurutan array dapat dilakukan dengan method .sort
seperti berikut:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.sort # ["Haskell", "Javascript", "Python", "Ruby"]
Jika ingin membalik urutan, kita dapat menggunakan method .reverse
seperti berikut:
languages = ["Haskell", "Javascript", "Python", "Ruby"]
languages.reverse # ["Ruby", "Python", "Javascript", "Haskell"]
Proses pengurutan data dengan method .sort
dapat berubah menjadi kompleks, untuk melakukan pengurutan yang lebih kompleks kita dapat menggunakan operator pembanding (<=>
) pada Ruby. Operator ini membandingkan objek Ruby sebagai berikut:
1 <=> 2 # -1
2 <=> 2 # 0
2 <=> 1 # 1
Berikut adalah contoh penggunaan operator pembanding dengan method .sort
:
languages = ["Ruby", "Javascript", "Python", "Haskell"]
languages.sort {|a,b| a <=> b}
# ["Haskell", "Javascript", "Python", "Ruby"]
Seperti method sebelumnya .sort
juga akan memberikan array baru tanpa mengubah array asli, gunakan .sort!
jika kamu perlu mengubah array asli.
Menghapus Duplikasi Elemen
Ketika kita menggabungkan dua atau lebih array kemungkinan kita akan mendapatkan nilai duplikasi
lang1 = ["Ruby", "Python"]
lang2 = ["Python", "Haskell"]
lang3 = ["Javascript", "Elixir"]
lang1 + lang2 + lang3
# ["Ruby", "Python", "Python", "Haskell", "Javascript", "Elixir"]
Kita dapat menggunakan method .uniq
untuk menghapus duplikasi tersebut
languages = ["Ruby", "Python", "Python", "Haskell", "Javascript", "Elixir"]
languages.uniq # ["Ruby", "Python", "Haskell", "Javascript", "Elixir"]
Namun selain menggunakan method .uniq
, ketika proses penggabungan kita dapat menggunakan operator pipa |
untuk menghindari duplikasi seperti berikut:
lang1 = ["Ruby", "Python"]
lang2 = ["Python", "Haskell"]
lang1 + lang2
# ["Ruby", "Python", "Python", "Haskell"]
Transformasi Data Array
Untuk melakukan transformasi pada sebuah array, kita perlu melakukan operasi pada tiap elemen array tersebut. Hal ini dapat dilakukan dengan menggunakan method .map
, berikut adalah contoh sederhana untuk menjumlahkan tiap elemen array dengan 2:
numbers = [1, 2, 3, 4, 5]
numbers.map {|number| number + 2}
# [3, 4, 5, 6, 7]
Sama seperti method sebelumnya .map
juga memiliki .map!
jika diperlukan untuk mengubah array asli.
Mereduksi Array
Mungkin kita pernah dihadapkan kondisi untuk menjumlahkan nilai pada sebuah array. Hal ini dapat dilakukan dengan menggunakan method .reduce
berikut contoh:
numbers = [1, 2, 3, 4, 5]
numbers.reduce(0) {|result, current| result += current}
# 15
Dan method .reduce
juga bisa menggunakan binary method, sehingga cara diatas dapat ditulis sebagai berikut:
numbers = [1, 2, 3, 4, 5]
numbers.reduce(:+)
# 15
Kesimpulan
Pada kesempatan ini kita telah melakukan beberapa operasi pada array termasuk didalamnya mengakses elemen, melakukan pencarian pada array, mengurutkan array, dan beberapa hal lainnya. Operasi pada array tersebut cukup berguna dalam memecahkan masalah yang sering dihadapi ketika melakukan pemrograman dengan Ruby.