Iterowanie po tablicach 2D
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 12 z 56.
Aby odwiedzić każdą komórkę w tablicy 2D, zagnieżdżasz dwie iteracje. Pętla zewnętrzna przechodzi przez wiersze, a pętla wewnętrzna przez kolumny danego wiersza.
Najbardziej idiomatyczny wzorzec w Ruby używa dwukrotnie each:
grid = [
[1, 2, 3],
[4, 5, 6]
]
grid.each do |row|
row.each do |cell|
puts cell
end
end
# 1, 2, 3, 4, 5, 6 (każda liczba w osobnym wierszu)Jeśli potrzebujesz również indeksów wiersza i kolumny, na przykład do oznaczenia każdej komórki, użyj each_with_index na obu poziomach:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endTen styl jest krótszy i bezpieczniejszy niż ręczne śledzenie indeksów — nie ma ryzyka wyjścia poza koniec wiersza.
Wyzwanie
ŁatwyPodana jest tablica 2D grid (3 wiersze × 3 kolumny z liczbami całkowitymi).
Dla każdego wiersza znajdź każdą komórkę, której wartość jest ściśle większa od średniej tego wiersza. Wypisz każdą taką komórkę w osobnym wierszu w formacie:
(r,c) = valueUżyj zagnieżdżonych each_with_index. Oblicz średnią wewnątrz pętli zewnętrznej, aby próg każdego wiersza był niezależny.
Dla domyślnej tablicy komórki, których wartości przekraczają średnią wiersza, to:
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7Spróbuj swoich sił
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# TODO: użyj zagnieżdżonego each_with_index, wypisz komórki > średnia wiersza
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 ocen3Tablice 2D
Podstawy tablic 2DDostęp do elementów tablic 2DIterowanie po tablicach 2DTypowe wzorce 2DPowtórzenie – operacje na macierzach6Projekt – Menedżer biblioteki
Przegląd projektuDodaj książkęPoćwicz samodzielnie: Kompilator Ruby online