Accéder aux éléments 2D
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 11 sur 56.
Pour lire ou mettre à jour une seule cellule dans un tableau 2D, enchaînez deux recherches d'index : la première choisit la ligne, la seconde choisit la colonne.
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
puts matrix[0][0] # 10 (en haut à gauche)
puts matrix[1][2] # 60 (ligne 1, colonne 2)
puts matrix[2][0] # 70 (en bas à gauche)La mise à jour d'une cellule utilise la même syntaxe sur le côté gauche :
matrix[0][1] = 99
puts matrix[0].inspect # [10, 99, 30]Deux requêtes de forme utiles :
puts matrix.length # 3 (nombre de lignes)
puts matrix[0].length # 3 (colonnes dans la ligne 0)Les index commencent à 0 et vont jusqu'à length - 1. Dépasser la fin retourne nil plutôt que de lever une erreur.
Défi
DébutantLe tableau 2D matrix est fourni. Lisez trois entiers (trois lignes) : r1, c1, puis v. Ensuite :
- Affichez la valeur à
matrix[r1][c1] - Définissez
matrix[r1][c1] = v - Affichez l'intégralité de
matrixmis à jour en utilisantinspect
Pour l'entrée 1 / 2 / 99, la sortie est :
60
[[10, 20, 30], [40, 50, 99], [70, 80, 90]]Aide-mémoire
Accédez aux cellules d'un tableau 2D et mettez-les à jour en utilisant des index chaînés [row][col] :
matrix = [
[10, 20, 30],
[40, 50, 60]
]
puts matrix[1][2] # 60
matrix[1][2] = 99 # mettre à jour la cellule
puts matrix.inspect # [[10, 20, 30], [40, 50, 99]]Requêtes sur la forme :
matrix.length # nombre de lignes
matrix[0].length # nombre de colonnes dans la ligne 0Les index commencent à 0 ; l'accès hors limites retourne nil.
Essayez vous-même
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
r1 = gets.to_i
c1 = gets.to_i
v = gets.to_i
# TODO: afficher matrix[r1][c1], assigner v, puis afficher toute la matrice
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline3Tableaux 2D
Bases des tableaux 2DAccéder aux éléments 2DParcourir des tableaux 2DModèles 2D courantsRécapitulatif - Opérations sur les matrices6Projet - Gestionnaire de bibliothèque
Présentation du projetAjouter un livre