Modèles 2D courants
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 13 sur 56.
Certaines opérations sur les tableaux 2D reviennent si souvent qu'il vaut la peine de les reconnaître par leur nom.
Sommer chaque cellule : aplatissez la grille en un tableau 1D et appelez sum :
grid = [[1, 2], [3, 4]]
puts grid.flatten.sum # 10Diagonale principale : les cellules où l'indice de ligne est égal à l'indice de colonne (matrix[i][i]) :
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
(0...matrix.length).each do |i|
puts matrix[i][i]
end
# 1, 5, 9Transposer : Ruby intègre déjà cette fonctionnalité. Les lignes deviennent des colonnes et vice-versa :
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]Les connaître par leur nom vous évite de réécrire les mêmes boucles imbriquées.
Défi
FacileLa matrix carrée est donnée (n × n). Affichez trois lignes, toutes dérivées des modèles de la théorie :
Anti-diagonal sum: <n>, la somme des cellules oùr + c == matrix.length - 1Column sums: [...], la somme de chaque colonne. Astuce : transposez d'abord, puis mappez chaque ligne à sa somme, puis utilisezinspectSymmetric: trueoufalse: la matrice est-elle égale à sa propre transposée ?
Pour la matrice par défaut, la sortie est :
Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: falseAide-mémoire
Opérations courantes sur les tableaux 2D en Ruby :
Somme de toutes les cellules — aplatir puis additionner :
grid.flatten.sumDiagonale principale — cellules où l'index de ligne est égal à l'index de colonne (matrix[i][i]) :
(0...matrix.length).each { |i| puts matrix[i][i] }
# i == 0: matrix[0][0], i == 1: matrix[1][1], ...Anti-diagonale — cellules où r + c == matrix.length - 1 :
(0...matrix.length).each { |i| puts matrix[i][matrix.length - 1 - i] }Transposition — les lignes deviennent des colonnes :
matrix.transpose
# [[1,4,7],[2,5,8],[3,6,9]]Sommes des colonnes — transposer d'abord, puis additionner chaque ligne :
matrix.transpose.map(&:sum) # [col0_sum, col1_sum, ...]Vérifier la symétrie — comparer la matrice à sa transposée :
matrix == matrix.transpose # true or falseEssayez vous-même
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# TODO : somme de l'anti-diagonale, sommes des colonnes via la transposée, vérification de la symétrie
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