Menu
Coddy logo textTech

Reduce / Inject

Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 23 z 56.

Czasami trzeba zredukować całą tablicę do jednej wartości: sumy, iloczynu lub najdłuższego ciągu znaków. Narzędziem do tego jest reduce (nazywane też inject: ta sama metoda, dwie nazwy).

Blok przyjmuje dwa parametry: akumulator i bieżący element. Wartość zwracana przez blok staje się następnym akumulatorem.

total = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts total   # 10

Krok po kroku akumulator przyjmuje wartości 0 → 1 → 3 → 6 → 10.

Pierwszy argument to wartość początkowa akumulatora. Jeśli go pominiesz, Ruby użyje pierwszego elementu tablicy:

[1, 2, 3, 4].reduce { |acc, n| acc * n }   # 24

W przypadku prostych operacji, takich jak suma i iloczyn, Ruby oferuje skrót: przekaż symbol zamiast bloku:

[1, 2, 3, 4].reduce(:+)   # 10
[1, 2, 3, 4].reduce(:*)   # 24

Gdy potrafisz zbudować własny akumulator, możesz obliczyć niemal wszystko w jednym przebiegu.

challenge icon

Wyzwanie

Łatwy

Wczytaj listę liczb całkowitych oddzielonych przecinkami. Wypisz trzy wiersze:

  1. Sumę (użyj reduce(:+))
  2. Iloczyn (użyj reduce(:*))
  3. Maksimum, obliczone za pomocą reduce i jawnego bloku, nie używając max.

Dla danych wejściowych 2,5,3,8 wynik to:

18
240
8

Spróbuj swoich sił

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: wypisz sumę, iloczyn i maksimum (używając reduce + jawnego bloku)
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator Ruby online