Łączenie wywołań map
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 22 z 56.
W podstawach poznano map, które tworzy nową tablicę przez przekształcenie każdego elementu. Jego prawdziwa moc ujawnia się, gdy łączysz je z select, reject i innymi podobnymi metodami.
Każda metoda zwraca tablicę, więc wywołanie kolejnej metody na wyniku pozwala kontynuować:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
puts result.inspect # [10, 30, 50]Czytaj łańcuch od góry do dołu: zacznij od liczb, pozostaw nieparzyste i pomnóż każdą przez 10. Bez zmiennych tymczasowych i pętli.
Skrót &:method_name działa zawsze, gdy blok wywołuje tylko jedną metodę:
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (tak samo)Ten skrót jest wszędzie w kodzie Ruby. Rozpoznawaj go, gdy go zobaczysz.
Wyzwanie
ŁatwyWczytaj listę słów rozdzielonych przecinkami. Wypisz w jednym wierszu słowa dłuższe niż 3 znaki, wielkimi literami, połączone za pomocą , .
Zbuduj to jako jeden łańcuch: użyj select, aby wybrać dłuższe słowa, map, aby przekształcić je za pomocą &:upcase, a następnie join.
Dla danych wejściowych hi,hello,yo,coddy,sup wynik to:
HELLO, CODDYSpróbuj swoich sił
words = gets.chomp.split(",")
# TODO: połącz w łańcuch select + map(&:upcase) + join
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Łańcuchy znaków w szczegółach
Przegląd metod łańcuchów znakówInterpolacja łańcuchów znakówIterowanie po łańcuchach znakówDzielenie i łączeniePowtórka – Tkacz łańcuchów znaków4Bloki, procki i lambdy
Czym jest blok?do..end a nawiasy klamroweSłowo kluczowe yieldParametry blokuProcki i lambdyPodsumowanie — własny iterator7Hashe, część 2
Hash.new z wartościami domyślnymiIterowanie po haszachZagnieżdżone haszeŁączenie i przekształcaniePowtórka — licznik częstotliwości10Projekt – ewidencja uczniów
Przegląd projektuDodawanie ucznia5Potęga Enumerable
Select i RejectŁączenie wywołań mapReduce / Injectcount, all?, any?, none?group_by i partitionsort_by, min_by, max_byPodsumowanie — potok danych8Zaawansowane podejmowanie decyzji
case z klasami i wyrażeniami regularnymiwhen z wieloma wartościamiOperator trójargumentowyInline if / unlessPowtórka – klasyfikator ocenPoćwicz samodzielnie: Kompilator Ruby online