Parcourir des tableaux 2D
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 12 sur 56.
Pour visiter chaque cellule d'un tableau en 2D, vous imbriquez deux itérations. La boucle externe parcourt les lignes ; la boucle interne parcourt les colonnes de cette ligne.
Le motif Ruby le plus idiomatique utilise each deux fois :
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 (chacun sur sa propre ligne)Si vous avez également besoin des index de ligne et de colonne, par exemple pour étiqueter chaque cellule, utilisez each_with_index aux deux niveaux :
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endCe style est plus court et plus sûr que le suivi manuel des index, il n'y a aucun risque de dépasser la fin d'une ligne.
Défi
FacileLe tableau 2D grid est fourni (3 lignes × 3 colonnes d'entiers).
Pour chaque ligne, trouvez chaque cellule dont la valeur est strictement supérieure à la moyenne de cette ligne. Affichez chaque cellule de ce type sur sa propre ligne au format :
(r,c) = valueUtilisez des each_with_index imbriqués. Calculez la moyenne à l'intérieur de la boucle externe afin que le seuil de chaque ligne soit indépendant.
Pour la grille par défaut, les cellules qui dépassent la moyenne de leur ligne sont :
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7Aide-mémoire
Pour itérer sur chaque cellule d'un tableau en 2D, imbriquez deux appels each :
grid.each do |row|
row.each do |cell|
puts cell
end
endPour accéder également aux index des lignes et des colonnes, utilisez each_with_index aux deux niveaux :
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endEssayez vous-même
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# À FAIRE : each_with_index imbriqués, afficher les cellules > la moyenne de la ligne
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