Percorrendo Arrays 2D
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 12 de 56.
Para visitar cada célula em um array bidimensional, você aninha duas iterações. O loop externo percorre as linhas; o loop interno percorre as colunas dessa linha.
O padrão Ruby mais idiomático usa each duas vezes:
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 (cada um em sua própria linha)Se você também precisar dos índices de linha e coluna, por exemplo para rotular cada célula, use each_with_index em ambos os níveis:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endEste estilo é mais curto e seguro do que rastrear índices manualmente; não há risco de ultrapassar o fim de uma linha.
Desafio
FácilA matriz 2D grid é fornecida (3 linhas × 3 colunas de inteiros).
Para cada linha, encontre todas as células cujo valor seja estritamente maior que a média daquela linha. Imprima cada célula desse tipo em sua própria linha, no formato:
(r,c) = valueUse each_with_index aninhado. Calcule a média dentro do loop externo para que o limite de cada linha seja independente.
Para a matriz padrão, as células que superam a média de sua linha são:
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7Experimente você mesmo
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# TODO: each_with_index aninhado, imprimir células > a média da linha
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Visão Geral dos Métodos de StringInterpolação de StringsPercorrendo StringsDividir e UnirRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA Palavra-chave yieldParâmetros de BlocoProcs e LambdasRevisão - Iterador Personalizado7Hashes - Parte 2
Hash.new com Valores PadrãoIterando sobre HashesHashes AninhadosMesclando e TransformandoRecapitulação - Contador de Frequência10Projeto - Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno2Intervalos
O que é um intervalo?Métodos de intervaloIntervalos em Case / WhenRevisão - Prática com intervalos5Potência do Enumerable
Select e RejectEncadeando MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Pipeline de Dados3Arrays 2D
Fundamentos de Arrays 2DAcessando elementos 2DPercorrendo Arrays 2DPadrões comuns em 2DRecapitulação - Operações com matrizes6Projeto - Gerenciador de Biblioteca
Visão Geral do ProjetoAdicionar LivroPratique por conta própria: Compilador de Ruby online