Iterando sobre 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ácilO array bidimensional grid é fornecido (3 linhas × 3 colunas de inteiros).
Para cada linha, encontre cada célula cujo valor seja estritamente maior que a média daquela linha. Imprima cada uma dessas células em sua própria linha no formato:
(r,c) = valueUse each_with_index aninhados. Calcule a média dentro do loop externo para que o limite de cada linha seja independente.
Para o grid 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) = 7Folha de consulta
Para iterar sobre cada célula em um array 2D, aninhe duas chamadas each:
grid.each do |row|
row.each do |cell|
puts cell
end
endPara também acessar os índices de linha e coluna, 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
endExperimente 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 a Fundo
Visão Geral de Métodos de StringInterpolação de StringsIterando sobre StringsSplit e JoinRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA palavra-chave yieldParâmetros de BlocoProcs e LambdasRecapitulação - Iterador Customizado7Hashes Parte 2
Hash.new com Valores PadrãoIterando em 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 / WhenRecapitulação - Prática com Intervalos5O Poder do Enumerable
Select e RejectEncadeando o MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Data Pipeline3Arrays 2D
Fundamentos de Arrays 2DAcessando Elementos 2DIterando sobre Arrays 2DPadrões 2D ComunsRecapitulação - Operações com Matrizes6Projeto - Gerenciador de Biblioteca
Visão Geral do ProjetoAdicionar Livro