🧩 Ruby Dizi (Array) Metotları: Veri Yönetimi ve Dönüşümü Rehberi
Ruby’de diziler (arrays), verileri saklamak ve yönetmek için en güçlü araçlardan biridir. Bu rehberde dizilerdeki elemanlara erişme, filtreleme, sıralama, rastgele seçim, dönüştürme ve toplama gibi en sık kullanılan metotları adım adım öğreneceksiniz.
🧠 Bu Rehberde Ne Öğreneceksiniz?
- Elemanlara erişim (
[],fetch,first,last) - Alt diziler oluşturma (
slice,take) - Rastgele eleman seçme (
sample) - Arama ve filtreleme (
include?,find,select,reject) - Sıralama (
sort,reverse,sort_by) - Tekrarlananları kaldırma (
uniq,|,-) - Veri dönüştürme (
map,collect) - Dizi-string dönüşümü (
join) - Diziyi tek değere indirgeme (
reduce,inject)
1️⃣ Dizi Elemanlarına Erişim
Ruby dizilerinde indeksler sıfırdan başlar:
baliklar = ["Köpek Balığı", "Orkinos", "Hamsi"]
baliklar[0] # "Köpek Balığı"
baliklar[-1] # "Hamsi"
💬 Negatif indeks sondan itibaren sayar.
Hazır Metotlar:
baliklar.first # "Köpek Balığı"
baliklar.last # "Hamsi"
Güvenli erişim (fetch):
baliklar.fetch(42, "Yok") # "Yok" (Varsayılan değer)
💬 Olmayan bir indeks için hata almak yerine varsayılan döndürebilirsiniz.
2️⃣ Alt Küme ve Rastgele Eleman Alma
Belirli sayıda eleman almak:
baliklar[1, 2] # ["Orkinos", "Hamsi"]
baliklar.slice(1, 2) # Aynı sonucu verir
Baştan eleman çekmek:
baliklar.take(2) # ["Köpek Balığı", "Orkinos"]
Rastgele seçim:
baliklar.sample # "Orkinos"
baliklar.sample(2) # ["Lüfer", "Hamsi"]
💬 sample, oyunlar veya rastgele seçimler için idealdir.
3️⃣ Arama ve Filtreleme
Dizide belirli bir eleman var mı?
baliklar.include? "Hamsi" # true
baliklar.include? "hamsi" # false
İlk eşleşeni bulma:
baliklar.find { |item| item.length > 5 } # "Köpek Balığı"
Tüm eşleşenleri alma:
baliklar.select { |i| i.include?("i") } # ["Orkinos", "Hamsi"]
Eşleşmeyenleri alma:
baliklar.reject { |i| i.include?("i") } # ["Köpek Balığı", "Lüfer"]
💬 select! ve reject! orijinal diziyi değiştirir.
4️⃣ Diziyi Sıralama ve Tekrarlananları Kaldırma
Tersine çevirme:
[1,2,3].reverse # [3,2,1]
Alfabetik sıralama:
isimler = ["Deniz", "Ahmet", "Ceylan"]
isimler.sort # ["Ahmet", "Ceylan", "Deniz"]
Ters alfabetik sıralama:
isimler.sort { |a, b| b <=> a }
Hash yapılarında belirli anahtara göre sıralama (sort_by):
hayvanlar = [{ad: "Kedi"}, {ad: "Aslan"}, {ad: "Kaplan"}]
sirali = hayvanlar.sort_by { |h| h[:ad] }
# [{ad:"Aslan"}, {ad:"Kaplan"}, {ad:"Kedi"}]
Yinelenenleri kaldırma:
[1,2,3,2,1].uniq # [1,2,3]
Dizileri birleştirirken tekrarı önleme:
["A","B"] | ["B","C"] # ["A","B","C"]
Diziden fark alma:
["A","B","C"] - ["B"] # ["A","C"]
5️⃣ Verileri Dönüştürme (map)
map, her eleman üzerinde işlem yapar ve sonuçları yeni bir diziye koyar:
sayilar = [2,4,6]
kareler = sayilar.map { |s| s * s }
# [4,16,36]
HTML örneği:
baliklar.map { |b| "<option>#{b}</option>" }
💬 map! orijinal diziyi değiştirir.
6️⃣ Dizi → String Dönüşümü (join)
kelimeler = ["deniz", "güneş", "kum"]
kelimeler.join(", ") # "deniz, güneş, kum"
map ve join beraber:
baliklar.map { |b| "<li>#{b}</li>" }.join("\n")
💬 Bu yapı HTML çıktısı oluşturmak için kullanışlıdır.
7️⃣ Diziyi Tek Değere İndirme (reduce)
Toplama işlemi:
[1,2,3].reduce(0) { |sum, n| sum + n } # 6
Kısa kullanım:
[1,2,3].reduce(:+) # 6
Filtreleme ve dönüştürme bir arada:
degerler = ["1", "2", "a", "3"]
sonuc = degerler.reduce([]) do |arr, v|
val = Integer(v) rescue nil
arr << val unless val.nil?
arr
end
# [1,2,3]
💬 reduce, diziyi tek bir toplama, metin veya veri yapısına çevirmek için kullanılır.
💬 Sıkça Sorulan Sorular (SSS)
1️⃣ map ve each farkı nedir?
each, her elemanı işler ama diziyi döndürür. map, işlenmiş yeni bir dizi döndürür.
2️⃣ sort mu sort_by mı?
sort, basit tipler içindir. sort_by, hash veya nesne gibi karmaşık yapılar için daha hızlıdır.
3️⃣ Ünlemli metotlar (map!, sort!) neden dikkat gerektirir?
Çünkü orijinal diziyi değiştirirler. Yan etkiler oluşabilir.
4️⃣ reduce sadece toplama için mi kullanılır?
Hayır. Diziyi tek bir string, hash veya özel yapıya dönüştürebilir.
5️⃣ uniq ne işe yarar?
Tekrarlanan değerleri kaldırarak veriyi sadeleştirir.
🎯 Sonuç
Bu rehberde Ruby dizilerinin kalbini oluşturan metotları öğrendiniz. Artık verileri sıralayabilir, dönüştürebilir ve optimize şekilde işleyebilirsiniz.
💡 Deneyin: Rabisu Bulut platformunda bir Sanal Sunucu (V-Server) oluşturun ve bu Ruby metotlarını canlı olarak test edin.