Bu kısımda Ruby programlama dilinde dizilerde nasıl eleman seçebiliriz ,seçtiğimiz elemanlar üzerinde nasıl değişiklik yapabiliriz ve dizilerde yineleme işlemlerini nasıl kullanabiliriz konuları üzerinde inceleme yapacağız. Dizilerde seçim işlemi genellikle bir blok tanımlayarak yapılır.
DİZİLERDE ELEMAN SEÇME
Dizilerde eleman seçme işlemlerini 2 farklı yolla yapılır. Bu yollardan birinde orijinal dizimizi korurken, diğerinde dizinin üzerine yazma yolu ile değişiklikler yapacağız.
DEĞİŞİKLİK YAPILMADAN SEÇME
Bu yolla yapılan seçme işlemi sonunda yeni bir dizi oluşturmuş oluruz.Ancak orijinal dizi olduğu şekilde korunur.
dizi = [1, 2, 3, 4, 5, 6]
şeklinde bir dizi tanımlanmış olsun.
dizi.select { |a| a > 3 } #=> [4, 5, 6] dizi.reject { |a| a < 3 } #=> [3, 4, 5, 6] dizi.drop_while { |a| a < 4 } #=> [4, 5, 6] dizi #=> [1, 2, 3, 4, 5, 6]
select, reject ve drop_while metodlarini dizimiz üzerinde uyguladık ve sonuçları yukarıda gördüğümüz şekilde olucaktır.Ancak son işlemde dizimizi tekrar çağırdık ve hiç bir değişikliğe uğramadığını gördük. Bu sebepten ötürü seçme işleminde kullandığımız bu metodlara yokedici olmayan(non-destructive) metotlar denilir.
DEĞİŞİKLİK YAPILARAK SEÇME
Bu durumda yapılan değişiklikler yeni bir dizi oluşturmaz ama mevcut olan orijinal dizinin üzerine yazılır ve ancak bu şekilde yeni bir dizi oluşturmuş oluruz.
Bir önceki durumumuzda kullandığımız select ve reject metotlarının bu duruma uyarlanmış halleri olan select! ve reject! kullanılan dizi üzerinde kalıcı değişikliğe sebep olur.Ayrıca delete_if ve keep_if gibi 2 farklı metottan da bu kısımda bahsedebiliriz.
dizi = [1, 2, 3, 4, 5, 6]
Yine yukarıdaki şekilde bir dizi tanımlayıp, metotlarımızı bu dizi üzerinde kullanalım.
dizi.delete_if { |a| a < 4 } #=> [4, 5, 6] dizi.keep_if { |a| a < 4 } #=> [1, 2, 3]
Çıktılarımızda görüldüğü üzere bu iki metot aynı select ve reject gibi birbirine zıt mantıkla çalışıyorlar ve geri değer döndürüyorlar.
DİZİLERDE YİNELEME(İTERASYON) İŞLEMLERİ
Dizilerde basitçe yineleme işlemleri için each ve each_with_index metotlarını kullanırız.
dizi = [2, 3, 5, 7, 9]
Yukarıdaki dizi üzerinde each ve each_with_index metodları ile bir takım işlemler yaparak yineleme nasıl yapılıyor inceleyelim.
Dizinin elemanlarının ortalamasını bulma
toplam = 0 dizi.each do |e| toplam += e end ortalama = toplam / dizi.size.to_f
Yukarıda yaptığımız işlemde dizimizdeki her elemanı tek tek toplayıp sonra da toplamı dizinin eleman sayısına bölerek bir sonuç elde ettik. Bu ortalama bulma işlemi sonucunda aşağıdaki sonuca ulaşırız
toplam #=> 26 ortalama #=> 5.2
Each ile yaptığımız yineleme işlemini tek satırda da yapabilirdik.
toplam = 0 dizi.each { |e| toplam += e } ortalama = toplam / dizi.size.to_f
Kodumuzu çalıştırdığımızda sonucun aynı olduğunu göreceğiz.
Dizinin çift indisli elemanlarini bulup ekrana yazdırma
dizi.each_with_index do | e, i | if i % 2 == 0 print e end end
Yukarıdaki kodumuz da dizimizin indisleri ile birlikte bir yineleme işlemine sokulmasını sağlıyor.Yineleme bloğumuz içinde yapılan işlemde eğer elemanin indisi bir çift sayı ise onu ekrana yazdıran kodu görüyoruz. Tahmin edildiği üzere çıktımız:
#=> 259
şeklinde olacaktır.
MAP METODU KULLANIMI
map metodu, dizilerde elemanlar üzerinde değişiklik yapmak için kullanılır.İşlem sonrasında yeni bir dizi oluşturulur ancak orijinal dizi olduğu gibi kalır. Eleman seçerken kullandığımız, select ve reject de olduğu gibi map metodunun da yokedici şekli mevcuttur, aynı şekilde map! metodu da mevcut orijinal dizinin üzerine yazarak işlemi gerçekleştirir.
dizi = [1,3,5,7,9] dizi.map { |a| a ** 2 } #=> [1,9,25,49,81] dizi #=> [1,3,5,7,9] dizi.map! { |a| 2*a } #=> [2,6,10,14,18] dizi #=> [2,6,10,14,18]
map metodu kullanımı yukarıdaki şekilde olacaktır ve bahsettiğimiz gibi map da orijinal dizi korunup yeni bir dizi oluşturulurken, map! da dizi üzerinde yapılan değişiklikler kalıcı olur.
NOT: Ruby programlama dilinde, diziler ile kullanılan daha bir çok method vardır. Size verebileceğim tavsiye bu metodları ezberlemeye kalkışmamanız.Onun yerine aşağıda vereceğim bağlantı adresinden Ruby’nin kütüphanesine girip diziler ile ilgili tüm metodlara gerektiğinde ordan ulaşmanız ve ya internet bağlantısı olmaması durumunda bir kereliğe mahsus girip bir metin dosyasına kopyala – yapıştır yaparak ihtiyaç anında ordan erişmenizdir.
Bağlantı adresi : https://docs.ruby-lang.org/en/2.5.0/Array.html