Ada kalanya kita membutuhkan array yang lebih besar. Misalkan program tadi kita perluas untuk menerima masukan dari beberapa orang untuk memesan barang kesukaannya. Tentu saja, array kita jadi tidak cukup menampung semuanya. Ada dua pendekatan untuk ini:
1. Tetap menggunakan array satu dimensi, dengan ukuran jumlah orang dikalikan jumlah barang. Hanya saja, pendekatan ini akan gagal kalau tiap orang memiliki jumlah barang yang berbeda (ada yang bisa mengatasinya?).
2. Kita gunakan array berdimensi lebih besar, dalam kasus ini cukup berdimensi dua. Aduh, gimana bikinnya?
Agak berbeda dengan bahasa pemrograman lain, pada Ruby kita tidak bisa secara langsung mendefinisikan array multidimensi dari awal. Mau tidak mau, kita harus mendefinisikan array baru di setiap elemennya. Kasarannya seperti ini:
arrayku = Array.new(jumlah_baris)
for i in 0 ... jumlah_baris
arrayku[i] = Array.new(jumlah_kolom)
end
Hati-hati, perintah
Array.size tidak serta merta memberikan ukuran total array kita (yang diduga adalah jumlah baris dikalikan jumlah kolom), namun hanya mengembalikan ukuran array terluar saja (dalam kasus di atas adalah jumlah baris). Tidak percaya? Nii...
arrayku = Array.new(5)
for i in 0 ... 5 # sementara kita pastikan dulu jumlahnya 5
arrayku[i] = Array.new(2)
end
# Ukuran array kita seharusnya 5 x 2 = 10 kan?
p arrayku.size
Hasilnya?
5
Ini terjadi karena sebenarnya array kita bukan array multidimensi, namun array yang "bersarang" dalam array lain (istilah kerennya
nested array). Jadi,
arrayku pada contoh di atas sebenarnya adalah array satu dimensi yang memiliki array satu dimensi di tiap elemennya. Walaupun demikian, kita bisa menganggapnya array multidimensi.
Lalu, cara aksesnya bagaimana? Jangan khawatir, nggak sulit kok. Karena kini array kita memiliki dimensi banyak, indeks yang diperlukan juga jadi banyak, tergantung jumlah dimensinya. Untuk array berdimensi dua, cukup gunakan
arrayku[indeks1][indeks2]. Array dimensi tiga? Ya
arrayku[indeks1][indeks2][indeks3]. Dan seterusnya.
Perlu dicoba? Ayo!
p "Berapa orang?"
jml_org = gets.chomp.to_i
nama_brg = Array.new(jml_org)
for i in 0 ... jml_org
p "Orang " + (i + 1).to_s + ": Berapa barang?"
jml_brg = gets.chomp.to_i
nama_brg[i] = Array.new(jml_brg)
for j in 0 ... jml_brg
p "Barang " + (j + 1).to_s + ":"
nama_brg[i][j] = gets.chomp
end
end
# sekarang tampilkan masukan keseluruhan
for i in 0 ... nama_brg.size
p "Orang " + (i + 1).to_s
for j in 0 ... nama_brg[i].size
p "Barang " + (j + 1).to_s + ": #{nama_brg[i][j]}"
end
end
Hasilnya:
"Berapa orang?"
2
"Orang 1: Berapa barang?"
3
"Barang 1:"
Kursi
"Barang 2:"
Meja
"Barang 3:"
Papan tulis
"Orang 2: Berapa barang?"
2
"Barang 1:"
Buku
"Barang 2:"
Pena
"Orang 1"
"Barang 1: Kursi"
"Barang 2: Meja"
"Barang 3: Papan tulis"
"Orang 2"
"Barang 1: Buku"
"Barang 2: Pena"
Tidak sesulit yang dibayangkan!
Tapi tunggu, ada yang aneh di program di atas... Apa ini?
p "Barang " + (j + 1).to_s + ": #{nama_brg[i][j]}"
Ini adalah jalan pintas untuk menuliskan nilai suatu variabel dalam string, jadi kita tidak perlu memanggil perintah
to_s. Formatnya adalah
#{nama_variabel}. Tapi ingat, ini hanya berlaku kalau string-nya menggunakan tanda kutip ganda, dan tidak semua variabel bisa diakses dengan cara ini. Coba deh ganti kode itu menjadi:
p "Barang #{(j + 1)}: #{nama_brg[i][j]}"
dan lihat hasilnya!
Oke! Itu saja tentang array! Lebih banyak lagi tentang array akan kita kupas di topik selanjutnya. Tapi tunggu, ada satu bentuk khusus dari array...
EDIT:
Aduh, maaf, aku lupa kalau [ i ] itu BBCode untuk mencetak miring

koreksinya sudah aku berikan di atas, yaitu:
untuk mengakses array dua dimensi:
arrayku[indeks1][indeks2]untuk mengakses array tiga dimensi:
arrayku[indeks1][indeks2][indeks3]Ada kebiasaan sih bahwa variabel penghitung (counter) itu namanya i, j, dan k
