Menu
Coddy logo textTech

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
end

Este estilo é mais curto e seguro do que rastrear índices manualmente; não há risco de ultrapassar o fim de uma linha.

challenge icon

Desafio

Fácil

O 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) = value

Use 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) = 7

Folha 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
end

Para 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
end

Experimente 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
quiz iconTeste seus conhecimentos

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