Pattern comuni con array 2D
Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 13 di 56.
Alcune operazioni sugli array 2D ricorrono così spesso che vale la pena riconoscerle per nome.
Somma ogni cella: appiattisci la griglia in un array 1D e chiama sum:
grid = [[1, 2], [3, 4]]
puts grid.flatten.sum # 10Diagonale principale: le celle in cui l’indice di riga è uguale all’indice di colonna (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, 9Trasporre: Ruby include già questa funzionalità. Le righe diventano colonne e viceversa:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]Conoscerli per nome ti evita di riscrivere gli stessi cicli annidati.
Sfida
FacileLa matrice quadrata matrix è data (n × n). Stampa tre righe, tutte derivate dagli schemi illustrati nella teoria:
Anti-diagonal sum: <n>, la somma delle celle in cuir + c == matrix.length - 1Column sums: [...], la somma di ogni colonna. Suggerimento: prima trasponi, poi associa ogni riga alla sua somma, poiinspectSymmetric: trueoppurefalse: la matrice è uguale alla sua trasposta?
Per la matrice predefinita, l'output è:
Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: falseProvalo tu
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# TODO: somma dell'antidiagonale, somme delle colonne tramite trasposizione, verifica della simmetria
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Panoramica dei metodi delle stringheInterpolazione di stringheIterare sulle stringheDividere e unireRiepilogo - Tessitore di stringhe4Blocchi, Proc e Lambda
Che cos’è un Block?do..end vs parentesi graffeLa keyword yieldParametri del BlockProc e LambdaRiepilogo - Iteratore personalizzato7Hash in Ruby - Parte 2
Hash.new con valori predefinitiIterare sugli hashHash annidatiUnire e trasformareRipasso - Contatore di frequenza10Progetto - Registri degli studenti
Panoramica del progettoAggiungere uno studente2Intervalli
Che cos'è un intervallo?Metodi degli intervalliIntervalli in Case / WhenRiepilogo - Esercitarsi con gli intervalli5La potenza di Enumerable
Select e RejectConcatenare MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRiepilogo - Pipeline di dati3Array bidimensionali
Basi degli array 2DAccesso agli elementi 2DIterare sugli array 2DPattern comuni con array 2DRiepilogo - Operazioni sulle matrici6Progetto - Gestore della biblioteca
Panoramica del progettoAggiungere un libroEsercitati da solo: Compilatore Ruby online