Acceso a elementos 2D
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 11 de 56.
Para leer o actualizar una sola celda en un array bidimensional, encadena dos búsquedas de índice: la primera selecciona la fila y la segunda selecciona la columna.
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
puts matrix[0][0] # 10 (superior izquierda)
puts matrix[1][2] # 60 (fila 1, columna 2)
puts matrix[2][0] # 70 (inferior izquierda)Actualizar una celda utiliza la misma sintaxis en el lado izquierdo:
matrix[0][1] = 99
puts matrix[0].inspect # [10, 99, 30]Dos consultas de forma útiles:
puts matrix.length # 3 (número de filas)
puts matrix[0].length # 3 (columnas en la fila 0)Los índices comienzan en 0 y llegan hasta length - 1. Ir más allá del final devuelve nil en lugar de generar un error.
Desafío
PrincipianteSe proporciona el array bidimensional matrix. Lee tres números enteros (tres líneas): r1, c1, luego v. Después:
- Imprime el valor en
matrix[r1][c1] - Establece
matrix[r1][c1] = v - Imprime todo el
matrixactualizado usandoinspect
Para la entrada 1 / 2 / 99, la salida es:
60
[[10, 20, 30], [40, 50, 99], [70, 80, 90]]Hoja de referencia
Accede y actualiza celdas en un arreglo 2D usando índices encadenados [row][col]:
matrix = [
[10, 20, 30],
[40, 50, 60]
]
puts matrix[1][2] # 60
matrix[1][2] = 99 # actualizar celda
puts matrix.inspect # [[10, 20, 30], [40, 50, 99]]Consultas de dimensiones:
matrix.length # número de filas
matrix[0].length # número de columnas en la fila 0Los índices comienzan en 0; acceder fuera de los límites devuelve nil.
Pruébalo tú mismo
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], asignar v, luego imprimir toda la matriz
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline3Arreglos 2D
Conceptos básicos de arreglos 2DAcceso a elementos 2DIteración sobre arreglos 2DPatrones comunes en 2DResumen - Operaciones con matrices6Proyecto - Gestor de biblioteca
Descripción general del proyectoAñadir libro