Menu
Coddy logo textTech

Iterowanie po haszach

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

Hashe są enumerowalne, więc możesz iterować po nich tak jak po tablicach. Istnieją trzy popularne wzorce, w zależności od tego, czego potrzebujesz.

each przekazuje zarówno klucz, jak i wartość:

prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
  puts "#{item}: $#{price}"
end

each_key przechodzi tylko po kluczach:

prices.each_key { |k| puts k }   # apple, bread, milk

each_value przechodzi tylko po wartościach:

prices.each_value { |v| puts v }   # 1, 3, 4

Każda metoda Enumerable, którą widziałeś w poprzednim rozdziale — map, select, reduce — działa też na hashach. Przy każdej iteracji otrzymujesz po prostu parę klucz/wartość (lub tablicę 2-elementową):

prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}
challenge icon

Wyzwanie

Średni

Stosujesz wyprzedaż do listy cen. Podany jest hash prices (symbol elementu => cena jako liczba całkowita).

Wczytaj jeden wiersz danych wejściowych: listę elementów objętych 50-procentową zniżką, rozdzielonych przecinkami (dopasowanych według nazw symboli w hashu).

Wyświetl w tej kolejności:

  1. Jeden wiersz na element w formacie <item>: $<final_price>, gdzie cena końcowa jest ceną po zniżce, jeśli element znajduje się na liście przecenionych, lub pierwotną ceną w przeciwnym razie. Iteruj za pomocą each. Elementy zachowują swoją pierwotną kolejność. Przy obliczaniu zniżki użyj dzielenia całkowitoliczbowego (price / 2).
  2. Was: $<n>: pierwotna suma (użyj values.sum)
  3. Now: $<n>: suma po zniżce
  4. Nazwy elementów, których końcowa cena nadal przekracza 2, połączone za pomocą , (użyj select + keys na nowym hashu)

Dla danych wejściowych bread,milk i domyślnego hasha wynik to:

apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheese

Spróbuj swoich sił

prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)

# TODO: utwórz hash cen końcowych za pomocą each; wypisz wiersze, sumy i drogie produkty
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