Typowe wzorce 2D
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 13 z 56.
Niektóre operacje na tablicach 2D pojawiają się tak często, że warto rozpoznawać je po nazwie.
Zsumuj każdą komórkę: spłaszcz siatkę do tablicy 1D i wywołaj sum:
grid = [[1, 2], [3, 4]]
puts grid.flatten.sum # 10Przekątna główna: komórki, w których indeks wiersza jest równy indeksowi kolumny (matrix[i][i]):
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
(0...matrix.length).each do |i|
puts matrix[i][i]
end
# 1, 5, 9Transponowanie: Ruby ma tę funkcję wbudowaną. Wiersze stają się kolumnami i odwrotnie:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]Znajomość ich nazw pozwala uniknąć ponownego zapisywania tych samych zagnieżdżonych pętli.
Wyzwanie
ŁatwyDana jest kwadratowa macierz matrix (n × n). Wypisz trzy wiersze, wszystkie wynikające ze wzorców omówionych w teorii:
Anti-diagonal sum: <n>, suma komórek, dla którychr + c == matrix.length - 1Column sums: [...], suma każdej kolumny. Podpowiedź: najpierw wykonaj transpozycję, następnie przekształć każdy wiersz na jego sumę, a potem użyjinspectSymmetric: truelubfalse: czy macierz jest równa swojej transpozycji?
Dla domyślnej macierzy wynik to:
Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: falseSpróbuj swoich sił
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# TODO: suma przekątnej przeciwnej, sumy kolumn za pomocą transpozycji, sprawdzenie symetrii
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