Hash.new z wartościami domyślnymi
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 33 z 56.
Domyślnie wyszukanie brakującego klucza w haszu zwraca nil:
scores = {}
puts scores["Alice"] # nilHash.new(default) to zmienia. Każdy brakujący klucz zwraca przekazaną przez ciebie wartość:
scores = Hash.new(0)
puts scores["Alice"] # 0To najczytelniejszy sposób zapisywania licznika. Nie musisz sprawdzać if scores[name].nil? przed zwiększeniem wartości:
counts = Hash.new(0)
["a", "b", "a", "c", "a"].each do |letter|
counts[letter] += 1
end
puts counts.inspect # {"a"=>3, "b"=>1, "c"=>1}Ważne: Hash.new(0) ustawia wartość domyślną na 0, ale nie zapisuje klucza podczas jego odczytu. Hash pozostaje pusty, dopóki nie przypiszesz wartości. Gdy więc zapiszesz counts[letter] += 1, klucz zostanie dodany z nową wartością.
Wyzwanie
ŁatwyWczytaj listę wpisów category:amount rozdzielonych przecinkami (np. food:12,gas:30,food:8,books:25,gas:15). Utwórz hash z sumami dla każdej kategorii za pomocą Hash.new(0), a następnie wypisz tylko te kategorie, których suma wynosi co najmniej 20, każdą w osobnym wierszu, posortowane według sumy malejąco:
<category>: <total>Dla powyższych przykładowych danych wejściowych wynik to:
gas: 45
books: 25
food: 20Jeśli żadna kategoria nie osiąga 20, nic nie wypisuj.
Spróbuj swoich sił
entries = gets.chomp.split(",")
# TODO: totals = Hash.new(0); zsumuj kwoty dla każdej kategorii;
# następnie wypisz kategorie z sumą >= 20, posortowane malejąco według sumy
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