Comment travailler avec des tableaux en Ruby

introduction

Un array est une structure de données qui représente une liste de valeurs, appelée elements. Les tableaux vous permettent de stocker plusieurs valeurs dans une seule variable. Cela peut condenser et organiser votre code, le rendant plus lisible et maintenable. Et comme les tableaux sont des objets avec leurs propres méthodes, ils peuvent faciliter le travail avec des listes de données.

En rubis. Les tableaux peuvent contenir n’importe quel type de données, y compris des nombres, des chaînes et d’autres objets Ruby.

Voyons un exemple simple de la puissance de tableaux. Imaginez que vous deviez maintenir une liste d’adresses électroniques. Sans tableau, vous pouvez stocker les adresses électroniques dans des variables, comme ceci:

emails.rb

email1 = "[email protected]"
email2 = "[email protected]"
email3 = "[email protected]"
email4 = "[email protected]"

Cette approche est prolixe et peut rapidement devenir difficile à maintenir car elle n’est pas très flexible. L’ajout d’une autre adresse électronique signifie que vous devez ajouter et suivre une variable supplémentaire.

Si vous utilisez un tableau, vous pouvez simplifier ces données:

emails.js

Au lieu de créer cinq variables distinctes, vous disposez maintenant d’une variable contenant les quatre adresses électroniques. Dans cet exemple, nous avons utilisé des crochets - + [] + - pour créer un tableau et avons séparé chaque entrée par une virgule. Si vous deviez ajouter une adresse électronique supplémentaire, vous ajouteriez une autre adresse électronique au tableau plutôt que de créer et de gérer une nouvelle variable.

Pour accéder à un élément spécifique, ou element d’un tableau, vous référencez son index ou sa position dans le tableau. En Ruby, les index commencent à zéro. aussi, pour récupérer le premier élément de notre tableau + emails +, nous ajoutons l’index de l’élément à la variable en utilisant des crochets, comme ceci:

print emails[0];

Dans ce didacticiel, vous allez créer des tableaux, accéder aux valeurs qu’ils contiennent, ajouter, modifier et supprimer des éléments d’un tableau et parcourir les éléments d’un tableau pour résoudre des problèmes plus complexes. Commençons par examiner comment créer des tableaux de manière plus détaillée.

Créer un tableau

Pour créer un tableau dans un programme Ruby, utilisez les crochets: (+ [] +) et séparez les valeurs que vous souhaitez stocker avec des virgules.

Par exemple, créez un tableau de requins et affectez-le à une variable, comme ceci:

requins.rb

sharks = ["Hammerhead", "Great White", "Tiger"]

Vous pouvez imprimer un tableau entier avec l’instruction + print, qui affichera le contenu du tableau:

print sharks
Output["Hammerhead", "Great White", "Tiger"]

Si vous voulez créer un tableau où chaque entrée est un seul mot, vous pouvez utiliser la syntaxe +% w {} +, qui crée un word array:

days = %w{Monday Tuesday Wednesday Thursday Friday Saturday Sunday}

Ceci équivaut à créer le tableau avec des accolades carrées:

days =  ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

Cependant, notez que la méthode +% w {} + vous permet d’ignorer les guillemets et les virgules.

Les tableaux sont souvent utilisés pour regrouper des listes de types de données similaires, mais en Ruby, les tableaux peuvent contenir n’importe quelle valeur ou une combinaison de valeurs, y compris d’autres tableaux. Voici un exemple de tableau contenant une chaîne, une valeur + nil +, un entier et un tableau de chaînes:

mixed_data.rb

record = [
   "Sammy",
   null,
   7,
   [
       "another",
       "array",
   ]
]

Voyons maintenant comment nous accédons aux données stockées dans des tableaux.

Accès aux éléments des tableaux

Vous accédez à un élément d’un tableau Ruby en vous référant à son index (entre crochets).

Explorons ce concept avec notre tableau de requins, affecté à la variable + sharks +:

requins.rb

sharks = ["Hammerhead", "Great White", "Tiger"]

Le tableau + sharks + a trois éléments. Voici une ventilation de la façon dont chaque élément du tableau + sharks + est indexé.

Hammerhead Greate White Tiger

0

1

2

Le premier élément du tableau est + Hammerhead +, qui est indexé sur + 0 +. Le dernier élément est + Tiger +, qui est indexé sur + 2 +. Le décompte commence par «+ 0 +» dans les indices, ce qui va à l’encontre de notre intuition naturelle de compter à 1, vous voudrez donc garder cela à l’esprit jusqu’à ce que cela devienne naturel.

Vous pouvez savoir combien d’éléments se trouvent dans un tableau avec la méthode + length.

sharks.length
Output3

Bien que les indices de «+ sharks » commencent à « 0 » et passent à « 2 », la propriété « length » renvoie le nombre d'éléments dans le tableau, ce qui correspond à « 3 +». Cela ne concerne pas du tout les indices.

Si vous voulez connaître le numéro d’index d’un élément spécifique dans un tableau, tel que + seahorse +, utilisez la méthode + index () +:

print sharks.index("Tiger")
Output2

Ceci retourne l’index du premier élément contenant ce texte. Si aucun numéro d’index n’est trouvé, comme pour une valeur inexistante, la console renverra + nil +.

print sharks.index("Whale")
Outputnil

Pour obtenir le dernier élément d’un tableau en Ruby, utilisez l’index + -1 +:

print sharks[-1]
Output"Tiger"

Ruby fournit également les méthodes + first + et + last + pour obtenir les premier et dernier éléments sans utiliser d’index:

puts sharks.first
puts sharks.last
Output"Hammerhead"
"Tiger"

Tenter d’accéder à un index qui n’existe pas retournera + nil +.

sharks[10]
Outputnil

Les tableaux peuvent contenir d’autres tableaux, que nous appelons _ tableaux imbriqués _. C’est un moyen de modéliser des ensembles de données bidimensionnels dans un programme. Voici un exemple de tableau imbriqué:

nested_array = [
   [
       "salmon",
       "halibut",
   ],
   [
       "coral",
       "reef",
   ]
]

Afin d’accéder aux éléments d’un tableau imbriqué, vous ajouteriez un autre numéro d’index correspondant au tableau intérieur. Par exemple, pour extraire la valeur + coral + de ce tableau imbriqué, utilisez l’instruction suivante:

print nested_array[1][0];
Outputcoral

Dans cet exemple, nous avons accédé au tableau à la position + 1 + de la variable + nested_array +, qui a renvoyé le tableau + [" coral "," reef "] +. Nous avons ensuite accédé aux éléments à la position + 0 + de ce tableau, qui était " coral ".

Voyons maintenant comment ajouter des éléments à un tableau.

Ajout d’éléments

Nous avons trois éléments dans notre tableau + sharks +, qui sont indexés de + 0 + à + ​​2 +:

requins.rb

sharks = ["Hammerhead", "Great White", "Tiger"]

Il y a plusieurs façons d’ajouter un nouvel élément. Vous pouvez affecter une valeur à l’index suivant, qui dans ce cas serait + 3 +:

sharks[3] = "whale";

print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale"]

Cette méthode est cependant sujette aux erreurs. Si vous ajoutez un élément et ignore accidentellement un index, il créera un élément + nil + dans le tableau.

sharks[5] = "Sand";

print sharks;
Output["Hammerhead", "Great White", "Tiger", "Whale", , "Sand"]

Tenter d’accéder à l’élément de tableau supplémentaire retournera sa valeur, qui sera + nil +.

sharks[4]
Outputnil

La recherche du prochain index disponible dans un tableau est sujette aux erreurs et prend du temps supplémentaire. Évitez les erreurs en utilisant la méthode + push +, qui ajoute un élément à la fin d’un tableau:

sharks.push("thresher")
print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", ]

Vous pouvez également utiliser la syntaxe + << + au lieu de la méthode + push + pour ajouter un élément à la fin d’un tableau:

sharks << "Bullhead"
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", ]

Pour ajouter un élément au début d’un tableau, utilisez la méthode + unshift () +:

sharks.unshift("Angel")
print sharks
Output[, "Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]

Maintenant que vous savez comment ajouter des éléments, voyons comment les supprimer.

Supprimer des éléments

Pour supprimer un élément spécifique d’un tableau, utilisez les méthodes + delete + ou + delete_at +. Dans le tableau + sharks +, nous avons accidentellement créé un élément de tableau + nil + plus tôt. Laissons-nous nous en débarrasser.

D’abord, trouvez sa position dans le tableau. Vous pouvez utiliser la méthode + index pour le faire:

print sharks.index(nil)
Output4

Puis utilisez + delete_at + pour supprimer l’élément à l’index + 4 + et imprimer le tableau:

sharks.delete_at(4)
print sharks
Output["Angel", "Hammerhead", "Great White", "Tiger", "Whale", "Thresher", "Bullhead"]

La méthode + delete + supprime les éléments d’un tableau qui correspondent à la valeur que vous transmettez. Utilisez-le pour supprimer + Whale + du tableau:

sharks.delete("Whale")
print sharks;
Output["Angel", "Hammerhead", "Great White", "Tiger", "Thresher", "Bullhead"]

La méthode + delete supprimera all les occurrences de la valeur que vous transmettez. Ainsi, si votre tableau contient des éléments en double, ils seront tous supprimés.

La méthode + pop + supprimera le dernier élément d’un tableau.

sharks.pop
print sharks;
Output["Angel", "Hammerhead", "Great White", "Tiger", "Thresher"]

+ Bullhead + a été supprimé en tant que dernier élément du tableau. Afin de supprimer le premier élément du tableau, utilisez la méthode + shift +.

sharks.shift
print sharks
Output["Hammerhead", "Great White", "Tiger", "Thresher"]

Cette fois, + Angel + a été retiré du début du tableau.

En utilisant + pop + et + shift +, vous pouvez supprimer des éléments du début et de la fin des tableaux. Il est préférable d’utiliser + pop + dans la mesure du possible, car les autres éléments du tableau conservent leurs numéros d’index d’origine.

Les méthodes + delete_at,` + pop` et + shift changent le tableau d’origine et renvoient l’élément que vous avez supprimé. Essayez cet exemple:

requins.rb

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
deleted_at_element = sharks.delete_at(1)
popped_element = sharks.pop

puts "Deleted_at element: #{deleted_at_element}"
puts "Popped element: #{popped_element}"

puts "Remaining array: #{sharks}"
OuptutDeleted_at element: Great White
Popped element: Whale
Remaining array: ["Hammerhead", "Tiger"]

Vous connaissez maintenant plusieurs façons de supprimer des éléments d’un tableau. Voyons maintenant comment modifier l’élément que nous avons déjà.

Modification des éléments existants

Pour mettre à jour un élément du tableau, attribuez une nouvelle valeur à l’index de l’élément à l’aide de l’opérateur d’attribution, comme vous le feriez avec une variable régulière.

Etant donné un nouveau tableau de requins, avec " Hammerhead " à l’index "+ 0 ", remplaçons "" Hammerhead "` par "" Angel "+`:

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks[0] = "Angel"
print sharks;
Output["Angel", "Great White", "Tiger", "Whale"]

Pour vous assurer de mettre à jour le bon élément, vous utiliseriez la méthode + index pour localiser l’élément en premier, comme vous avez fait pour rechercher l’élément que vous souhaitez supprimer.

Voyons maintenant comment travailler avec tous les éléments du tableau.

Itérer sur un tableau

Ruby offre de nombreuses façons de parcourir un tableau. Chaque méthode utilisée dépend du type de travail que vous souhaitez effectuer. Dans cet article, nous verrons comment itérer sur un tableau et afficher chacun de ses éléments.

Ruby fournit la syntaxe + for..in +, qui ressemble à ceci:

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
for shark in sharks do
 puts shark
end

Voilà comment cela fonctionne. Pour chaque élément du tableau + sharks +, Ruby assigne cet élément à la variable locale + shark +. Nous pouvons ensuite imprimer la valeur de l’élément en utilisant + met +.

Cependant, vous ne verrez pas très souvent + car..in +. Les tableaux Ruby sont des objets et fournissent la méthode + each + pour travailler avec des éléments. La méthode + each + fonctionne de manière similaire à + ​​for..in +, mais a une syntaxe différente:

chaque.rb

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each do |shark|
 puts shark
end

La méthode + each + utilise une syntaxe que vous verrez souvent dans la programmation Ruby. Il prend un bloc Ruby comme argument. Un block est un code qui sera exécuté ultérieurement dans le contexte de la méthode. Dans ce cas, le code est + met shark +. Le mot-clé + shark +, encadré par les caractères de canal (+ | +), est la variable locale qui représente l’élément du tableau auquel le bloc aura accès. Ruby assigne l’élément à cette variable et exécute le code dans le bloc. La méthode + each + répète ce processus pour chaque élément du tableau. Le résultat ressemble à ceci:

OutputHammerhead
Great White
Tiger
Whale

Lorsque le bloc ne comporte qu’une seule ligne, vous voyez souvent les développeurs Ruby remplacer les mots-clés + do + et + end + par des accolades et condenser l’intégralité de l’instruction en une seule ligne, comme ceci:

chaque.rb

...
sharks.each {|shark| puts shark }

Cela produit les mêmes résultats mais utilise moins de lignes de code.

La méthode + each_with_index + fonctionne de la même manière, mais elle vous donne également accès à l’index de l’élément de tableau. Ce programme utilise + each_with_index + pour afficher l’index et la valeur de chaque élément:

each_with_index.rb

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each_with_index do |shark, index|
 puts "The index is #{index}"
 puts "The value is #{shark}"
end

Pour chaque élément du tableau, Ruby affecte l’élément à la variable + shark +, et attribue l’index actuel à la variable + index +. Nous pouvons ensuite référencer ces deux variables dans le bloc.

Le résultat de ce programme ressemble à ceci:

OutputThe index is 0
The value is Hammerhead
The index is 1
The value is Great White
The index is 2
The value is Tiger
The index is 3
The value is Whale

Vous interagirez souvent sur les éléments d’un tableau dans vos propres programmes, par exemple lorsque vous devez afficher les éléments d’une base de données sur un site Web ou lire des lignes d’un fichier et en traiter le contenu.

Conclusion

Les tableaux constituent une partie extrêmement polyvalente et fondamentale de la programmation en Ruby. Dans ce tutoriel, vous avez créé des tableaux et accédé à des éléments individuels. Vous avez également ajouté, supprimé et modifié des éléments dans un tableau. Enfin, vous avez exploré deux méthodes pour effectuer une itération sur un tableau et en afficher le contenu. Cette méthode est généralement utilisée pour afficher des données.

Découvrez d’autres types de données dans Ruby en lisant le tutoriel Comprendre les types de données en Ruby.