Table des matières
- Qu’est-ce que Array#shift ?
- Comment utiliser Array#shift
- Alternatives à shift
- Considérations sur les performances
- Conclusion
Qu’est-ce que Array#shift ?
En Ruby, Array#shift
est une méthode qui supprime et renvoie le premier élément d’un tableau. C’est une méthode destructive, ce qui signifie qu’elle modifie directement le tableau d’origine. Si le tableau est vide, elle renvoie nil
.
Comment utiliser Array#shift
La syntaxe est simple :
my_array = [1, 2, 3, 4, 5]
first_element = my_array.shift
puts first_element # Sortie : 1
puts my_array.inspect # Sortie : [2, 3, 4, 5]
Ici, shift
supprime le nombre 1 du début de my_array
et l’affecte à first_element
. Le tableau d’origine est maintenant définitivement modifié.
Exemple : Tableau vide
empty_array = []
removed_element = empty_array.shift
puts removed_element # Sortie : nil
puts empty_array.inspect # Sortie : []
Exemple : Enchaînement des décalages
my_array = [1, 2, 3, 4, 5]
first = my_array.shift
second = my_array.shift
puts first # Sortie : 1
puts second # Sortie : 2
puts my_array.inspect # Sortie : [3, 4, 5]
Exemple : Itération avec shift
my_array = [1, 2, 3, 4, 5]
while element = my_array.shift
puts element
end
# Sortie :
# 1
# 2
# 3
# 4
# 5
Alternatives à shift
Si vous devez préserver le tableau d’origine, utilisez Array#dup
pour créer une copie avant d’appeler shift
. Sinon, pour un contrôle plus précis de la suppression d’éléments, considérez ces options :
Array#slice!(0)
: Supprime et renvoie le premier élément. Similaire àshift
mais permet de supprimer plus d’un élément en spécifiant une plage.Array#take(n)
: Renvoie lesn
premiers éléments sans modifier le tableau d’origine.Array#drop(n)
: Renvoie un nouveau tableau contenant tous les éléments sauf lesn
premiers éléments.
Considérations sur les performances
La complexité temporelle de Array#shift
est O(n) car tous les éléments suivants doivent être décalés d’une position vers la gauche. Cependant, l’implémentation Ruby utilise des tableaux dynamiques, ce qui rend la complexité temporelle amortie souvent plus proche de O(1) grâce à une gestion efficace de la mémoire. Pour les grands tableaux, la différence de performance entre shift
et les alternatives peut devenir perceptible. Si les performances sont critiques pour les très grands tableaux, considérez les alternatives qui évitent le décalage des éléments (comme l’utilisation d’un énumérateur).
Conclusion
Array#shift
fournit un moyen pratique de supprimer et d’accéder au premier élément d’un tableau en Ruby. Comprendre sa nature destructive et les alternatives disponibles est crucial pour écrire un code efficace et maintenable. Choisissez la méthode qui convient le mieux à vos besoins, en tenant compte du fait que vous devez préserver ou non le tableau d’origine et de la taille des données.