En Ruby, les tableaux sont des collections ordonnées de n'importe quel objet, indexées par des entiers.
Les indices d'un tableau commencent à 0.
Un indice négatif est considéré comme relatif à la fin du tableau. Par exemple, un indice de -1 désigne le dernier élément du tableau, -2 l'avant-dernier, et ainsi de suite.
Les tableaux sont normalement créés avec la notation [].
Ils peuvent contenir n'importe quel type d'objet.
array = [1, "two", 3.0]
Les éléments d'un tableau peuvent être récupérés par leur indice avec la méthode #[].
Elle renvoie l'élément situé à cet indice, ou un sous-tableau qui commence à l'indice de départ et continue sur une longueur donnée.
Les indices négatifs se comptent à rebours depuis la fin du tableau.
a = [ "a", "b", "c", "d", "e" ]
a[2] #=> "c"
a[6] #=> nil
a[1, 3] #=> [ "b", "c", "d" ]
a[-1] #=> "e"
a[-2] #=> "d"
a[-3, 2] #=> ["c", "d"]
Il existe de nombreuses méthodes utilitaires bien pratiques sur les tableaux. Voici quelques-unes des plus courantes :
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.size #=> 8
fibonacci.sum #=> 33
fibonacci.reverse #=> [13, 8, 5, 3, 2, 1, 1, 0]
Plutôt que d'utiliser des boucles pour parcourir les collections, en Ruby, on utilise l'énumération.
L'énumération consiste à parcourir une collection (ici un tableau) et à effectuer une action sur chaque objet. C'est un concept clé en Ruby, qui sert notamment à trier, regrouper, transformer, réduire, et bien d'autres choses encore.
Une énumération qui affiche chaque mot d'un tableau ressemblerait à ceci :
words = ["the", "cat", "sat"]
words.each do |word|
puts word
end
# Output:
# the
# cat
# sat
Dans cet exemple, on a appelé la méthode .each sur notre tableau et on lui a passé un bloc qui prend un paramètre (word) et l'affiche.
On étudiera les blocs bien plus en détail plus loin dans le parcours, mais pour l'instant, vois-les comme des fonctions anonymes qui peuvent prendre zéro argument ou plus.
Ils peuvent être définis avec la syntaxe do...end (ci-dessus) ou la syntaxe {} (ci-dessous).
Voici d'autres exemples de méthodes de tableau qui utilisent des blocs :
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.count { |number| number == 1 } #=> 2
fibonacci.any? { |number| number == 6 } #=> false
fibonacci.select { |number| number.odd? } #=> [1, 1, 3, 5, 13]
fibonacci.all? { |number| number < 20 } #=> true
fibonacci.map { |number| number * 2 } #=> [0, 2, 2, 4, 6, 10, 16, 26]
Tu es un passionné d'observation des oiseaux qui note combien d'oiseaux ont visité ton jardin au cours des sept derniers jours.
Tu as cinq tâches, qui portent toutes sur le nombre d'oiseaux ayant visité ton jardin.
Pour pouvoir comparer, tu gardes toujours à portée de main une copie des comptages de la semaine dernière, qui étaient : 0, 2, 5, 3, 7, 8 et 4. Implémente la méthode BirdCount.last_week qui renvoie les comptages de la semaine dernière :
BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]
Implémente la méthode BirdCount#yesterday pour renvoyer combien d'oiseaux ont visité ton jardin hier. Les comptages sont classés par jour, le premier élément étant le comptage du jour le plus ancien et le dernier, celui d'aujourd'hui.
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4
Implémente la méthode BirdCount#total pour renvoyer le nombre total d'oiseaux qui ont visité ton jardin :
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19
Certains jours sont plus chargés que d'autres. Un jour chargé est un jour où cinq oiseaux ou plus ont visité ton jardin.
Implémente la méthode BirdCount#busy_days pour renvoyer le nombre de jours chargés :
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2
Implémente la méthode BirdCount#day_without_birds? qui renvoie true s'il y a eu un jour où aucun oiseau n'a visité le jardin ; sinon, renvoie false :
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.