Reduce / Inject
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 23 / 56.
Bazen bir dizinin tamamını tek bir değere, bir toplama, bir çarpıma veya en uzun dizeye indirgemeniz gerekir. reduce (aynı zamanda inject olarak da adlandırılır: aynı metod, iki isim) bu iş için kullanılan araçtır.
Blok iki parametre alır: biriktirici (accumulator) ve geçerli öğe. Bloğun dönüş değeri bir sonraki biriktirici olur.
total = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts total # 10Adım adım biriktirici şöyledir: 0 → 1 → 3 → 6 → 10.
İlk argüman, biriktiricinin (accumulator) başlangıç değeridir. Eğer bunu belirtmezseniz, Ruby dizinin ilk elemanını kullanır:
[1, 2, 3, 4].reduce { |acc, n| acc * n } # 24Toplam ve çarpım gibi saf işlemler için Ruby size bir kısayol sunar; bir blok yerine bir sembol geçirin:
[1, 2, 3, 4].reduce(:+) # 10
[1, 2, 3, 4].reduce(:*) # 24Özel bir biriktirici (accumulator) oluşturabildiğinizde, neredeyse her şeyi tek bir geçişte hesaplayabilirsiniz.
Görev
KolayVirgülle ayrılmış bir tam sayı listesi okuyun. Üç satır yazdırın:
- Toplam (
reduce(:+)kullanın) - Çarpım (
reduce(:*)kullanın) reduceve açık bir blok ile hesaplanan maksimum değer,maxkullanılmamalıdır.
2,5,3,8 girdisi için çıktı şöyledir:
18
240
8Kendin dene
numbers = gets.chomp.split(",").map(&:to_i)
# YAPILACAK: toplamı, çarpımı ve maksimumu yazdır (reduce + açık blok ile)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Dizeler Detaylı İnceleme
Dize Metotlarına Genel BakışDize EnterpolasyonuDizeler Üzerinde YinelemeBölme ve BirleştirmeTekrar - Dize Dokuyucu4Bloklar, Proc'lar ve Lambda'lar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar SözcüğüBlok ParametreleriProc'lar ve Lambda'larÖzet - Özel Yineleyici7Hash'ler 2. Bölüm
Varsayılanlarla Hash.newHash'ler Üzerinde Yinelemeİç İçe Hash'lerBirleştirme ve DönüştürmeTekrar - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Seçme ve ReddetmeMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byTekrar - Veri HattıKendi başına pratik yap: Online Ruby derleyicisi