Acessando Elementos 2D
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 11 de 56.
Para ler ou atualizar uma única célula em um array 2D, encadeie duas buscas de índice: a primeira escolhe a linha, a segunda escolhe a coluna.
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
puts matrix[0][0] # 10 (superior esquerdo)
puts matrix[1][2] # 60 (linha 1, coluna 2)
puts matrix[2][0] # 70 (inferior esquerdo)Atualizar uma célula usa a mesma sintaxe no lado esquerdo:
matrix[0][1] = 99
puts matrix[0].inspect # [10, 99, 30]Duas consultas de formato úteis:
puts matrix.length # 3 (número de linhas)
puts matrix[0].length # 3 (colunas na linha 0)Os índices começam em 0 e vão até length - 1. Ultrapassar o final retorna nil em vez de gerar um erro.
Desafio
InicianteO array bidimensional matrix é fornecido. Leia três inteiros (três linhas): r1, c1, depois v. Então:
- Imprima o valor em
matrix[r1][c1] - Defina
matrix[r1][c1] = v - Imprima todo o
matrixatualizado usandoinspect
Para a entrada 1 / 2 / 99, a saída é:
60
[[10, 20, 30], [40, 50, 99], [70, 80, 90]]Folha de consulta
Acesse e atualize células em um array 2D usando índices encadeados [row][col]:
matrix = [
[10, 20, 30],
[40, 50, 60]
]
puts matrix[1][2] # 60
matrix[1][2] = 99 # update cell
puts matrix.inspect # [[10, 20, 30], [40, 50, 99]]Consultas de formato (shape):
matrix.length # number of rows
matrix[0].length # number of columns in row 0Os índices começam em 0; acessar fora dos limites (out-of-bounds) retorna nil.
Experimente você mesmo
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
r1 = gets.to_i
c1 = gets.to_i
v = gets.to_i
# TODO: imprimir matrix[r1][c1], atribuir v, depois imprimir a matriz inteira
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