Ruby de diziler; herhangi bir nesnenin, tamsayı indisli koleksiyonlarıdır. Dizilerde indisler, C ve JAVA dillerinde olduğu gibi 0 ‘dan başlar. Ayrıca negatif tamsayılar da indis olarak kullanılabilir. Örnek vermek gerekirse bir dizinin -1 nolu indisi o dizinin son elemanını verecektir. Bu ifadeden de anlaşılacağı üzere, Ruby ‘de dizilerin negatif indisleri elemanları sondan başa doğru ters bir sıra ile belirtecektir.
Ayrıca Ruby dilinin en güzel yönlerinden birisi de dizilerde farklı türdeki elemanları tutabilirsiniz.
DİZİ OLUŞTURMA
Ruby ‘de dizi oluşturmanın birçok yolu vardır. Boş bir dizi oluşturabilirsiniz veya atama operatörü ile dizinize bir takım elemanlar da ekleyebilirsiniz. Şimdi birlikte nasıl dizi oluşturulur onlara bir göz atalım:
Boş Dizi
dizi = []
#Ve ya bu şekilde de boş bir dizi oluşturulabilir.
dizi = Array.new
Elemanlı Dizi
dizi = [1, 3,"elma", 0.5, "Ali"]
Veya bu şekilde 3 elemanlı, elemanları nil olan bir dizi de oluşturulabilir:
dizi = Array.new(3) # dizi = [nil,nil,nil]
Metin Dizisi
dizi = %(ali veli mehmet erdem)
# dizi = [“ali”,”veli”,”mehmet”,”erdem”]
Bu şekilde de elemanlarının hepsi metin(string) olan bir dizi oluşturabilirsiniz.
Sembol Dizisi
dizi = %i(ali veli mehmet)
#dizi = [:ali,:veli,:mehmet]
Bu şekilde de elemanlarının hepsi sembol(symbol) olan bir dizi oluşturabilirsiniz.
ELEMANLARA ERİŞME
Dizilerin tuttuğu elemanlara erişebilmek için de birçok yol vardır. İlk akla gelen ve en çok kullanılan yol tabi ki köşeli parantez içine erişilmek istenilen indisin yazılması şeklinde kullanılan yoldur. Ancak bahsettiğimiz gibi birçok farklı yöntem vardır. Diğer farklı durumlara da göz atalım:
dizi = [1,2,3,4,5,6]
Dizimiz bu şekilde tanımlanmış olsun
dizi[0] #=> 1 dizi[3] #=> 4 dizi[7] #=> nil dizi[-2] #=> 5 dizi[1,4] #=> [2,3,4,5] dizi[2..5] #=> [3,4,5,6]
Köşeli parantez kullanılarak yukarıda görülen şekillerde elemanlara erişim sağlanılabilir. Şimdi de aynı dizi üzerinden köşeli parantez ve ya indis kullanmadan yapılan erişimlere göz atalım:
#at() metodu dizi.at(0) #=> 1 #fetch() metodu dizi.fetch(5) #=> 6 dizi.fetch(100) #=> Hata! Çünkü dizimiz 6 elemanlı # first ile ilk indisteki ve last ile son indisteki elemana erişebiliriz. dizi.first #=> 1 dizi.last #=> 6 # take(n) ile dizinin n sayıdakı elemanına erişim sağlayabiliriz. dizi.take(4)#=> [1,2,3,4] # drop() metodu; # take metodunun zit mantığı ile çalışır. dizi.drop(4) #=> [3,4,5,6]
DİZİ HAKKINDA BİLGİ ALMA
Diziler hakkında bazen bilgi almamız gerekebilir. Mesela dizinin boyutu kaç? Dizi boş mu? veya istenilen elemanı içeriyor mu? Bu bilgilere erişebilmek için de belirli metodları kullanacağız
Dizinin Boyutu;
dizi = %w(elma armut kiraz kavun) #=> ["elma","armut","kiraz","kavun"] dizi.size #=> 4 dizi.length #=> 4 dizi.count #=> 4
Dizi Boş Mu?
dizi.empty? #=> false
Dizi Bu Elemanı İçeriyor Mu?
dizi.include?("elma") #=> true dizi.include?("karpuz") #=> false
DİZİLERE ELEMAN EKLEME- ÇIKARMA
Dizilere eleman eklerken ve ya dizilerden eleman çıkarırken de birçok farklı yol kullanabiliriz.
dizi = [2,3,5,7]
Örneklerimizde yukarıdaki diziyi ele alalım.
Eleman Ekleme;
push() metodu ve ya << operatörü ile dizimize sondan eleman eklemiş oluruz.
dizi.push(11) #=> [2,3,5,7,11] dizi << (13) #=> [2,3,5,7,11,13]
unshift() metodu ile dizimize baştan eleman eklemiş oluruz.
dizi.unshift(1) #=> [1,2,3,5,7,11,13]
nsert() metodu ile dizimize istediğimiz bir indise eleman eklemiş oluruz. İstenilen indisteki mevcut eleman bir indis ileri kayacaktır. Ayrıca insert() metodu ile çoklu eleman ekleme de yapabiliriz.
dizi.insert(4, "elma") #=> [1,2,3,5,"elma",7,11,13] dizi.insert(2, "muz","nar","dut") #=> [1,2,"muz","nar","dut",3,5,"elma",7,11,13]
Eleman Çıkarma;
pop metodu, diziden sondaki elemanı çıkartır ve onu geri döner.
dizi.pop #=> 13 dizi #=> [1,2,"muz","nar","dut",3,5,"elma",7,11]
shift metodu, diziden baştaki elemanı çıkartır ve onu geri döner.
dizi.shift #=> 1 dizi #=> [2,"muz","nar","dut",3,5,"elma",7,11]
delete_at() metodu, diziden istediğimiz indisteki elemanı siler ve geri döner.
dizi.delete_at(4) #=> 3 dizi #=> [2,"muz","nar","dut",5,"elma",7,11]
delete() metodu, diziden istedigimiz elemanı siler ve geri döner.
dizi.delete("nar") #=> "nar" dizi #=> [2,"muz","dut",3,5,"elma",7,11]
compact ile dizideki tüm nil değerleri silebiliriz ancak değişiklik kalıcı olsun istiyorsak compact! şeklinde kullanmamız gerekir.
dizi = [1,4,nil,6,2,nil,12]
Yukarıdaki diziye compact ve compact! metodlarını uygularsak
dizi.compact #=> [1,4,6,2,12] dizi #=> [1,4,nil,6,2,nil,12] dizi.compact! #=> [1,4,6,2,12] dizi #=> [1,4,6,2,12]
olduğunu görebiliriz.
uniq metodu ise bir diğer faydalı metottur. Bu metot ile diziden tekrar eden elemanları çıkartabiliriz.
dizi = [1,2,3,3,4,2,4,3,6,7,7,9] dizi.uniq #=> [1,2,3,4,6,7,9]
çıktımız yukarıdaki şekilde hiç bir elemanının tekrar etmediği şekilde olacaktır.