Iterare sugli array 2D
Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 12 di 56.
Per visitare ogni cella in un array 2D, annidi due cicli. Il ciclo esterno scorre le righe; quello interno scorre le colonne di quella riga.
Lo schema Ruby più idiomatico usa each due volte:
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 (ognuno su una riga separata)Se hai bisogno anche degli indici di riga e colonna, per esempio per etichettare ogni cella, usa each_with_index a entrambi i livelli:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endQuesto stile è più breve e sicuro che tenere traccia degli indici manualmente: non c'è il rischio di superare la fine di una riga.
Sfida
FacileÈ dato l'array 2D grid (3 righe × 3 colonne di interi).
Per ogni riga, trova ogni cella il cui valore è strettamente maggiore della media di quella riga. Stampa ogni cella del genere su una riga a sé stante nel formato:
(r,c) = valueUsa each_with_index annidati. Calcola la media all'interno del ciclo esterno, così la soglia di ogni riga è indipendente.
Per la griglia predefinita, le celle che superano la media della propria riga sono:
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7Provalo tu
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# TODO: usa each_with_index annidati, stampa le celle > della media della riga
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