Map Zincirleme
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 22 / 56.
Temel bilgilerde map ile tanıştınız; her bir öğeyi dönüştürerek yeni bir dizi oluşturur. Gerçek gücü, onu select, reject ve benzerleriyle zincirlediğinizde ortaya çıkar.
Her metot bir dizi döndürür, bu nedenle sonuç üzerinde başka bir metot çağırmak işlemi devam ettirir:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
puts result.inspect # [10, 30, 50]Zinciri yukarıdan aşağıya okuyun: sayılarla başlayın, tek olanları tutun, her birini 10 ile çarpın. Geçici değişken yok, döngü yok.
&:method_name kısayolu, blok sadece bir metot çağırdığında çalışır:
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (aynı)Bu kısaltma Ruby kodunda her yerdedir. Gördüğünüzde onu tanıyın.
Görev
KolayVirgülle ayrılmış bir kelime listesi okuyun. 3 karakterden uzun olan kelimeleri, büyük harfle ve , ile birleştirilmiş şekilde tek bir satıra yazdırın.
Bunu tek bir zincir olarak oluşturun: uzun olanları select edin, onları &:upcase ile map edin, ardından join kullanın.
hi,hello,yo,coddy,sup girişi için çıktı şöyledir:
HELLO, CODDYKopya kağıdı
Dizi metotlarını zincirleyin — her biri yeni bir dizi döndürür, böylece sonuç üzerinde metot çağırmaya devam edebilirsiniz:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
# [10, 30, 50]Bir blok sadece bir metot çağırdığında kısayol olarak &:method_name kullanın:
["hi", "yo"].map(&:upcase) # ["HI", "YO"]Kendin dene
words = gets.chomp.split(",")
# YAPILACAK: select + map(&:upcase) + join işlemlerini zincirle
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
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı