2011-03-06 3 views
1

Array.delete La méthode renvoie l'élément supprimé. Mais, et si j'ai besoin du tableau restant (sans changer le tableau d'origine)?Quel est le moyen le plus efficace pour obtenir le tableau restant après la suppression d'un élément de tableau?

Eh bien, cela est une option:

%w(hello stack overflow !).delete_if{|x| x == 'overflow'} 
# => ["hello", "stack", "!"] 

Je me demande s'il y a une plus belle façon, quelque chose comme:

%w(hello stack overflow !).<something>('overflow') 

Toutes les idées?

Répondre

6
%w(hello stack overflow !) - %w(overflow) 
=> ["hello", "stack", "!"] 
+0

Vraiment sympa! Merci! –

0
irb(main):001:0> x=%w(hello stack) 
=> ["hello", "stack"] 
irb(main):002:0> x.delete('stack') 
=> "stack" 
irb(main):003:0> x 
=> ["hello"] 

, utilisez la méthode delete.

+1

Le tableau d'origine ne doit pas être modifié. –

1

Une façon serait comme ceci:

newarray = old_array.select {|item| item != "overflow"} 
+0

Je pense que ce sera très inefficace. – methyl

+1

Je pense qu'il aura la même efficacité que l'opérateur '-', car ils créent tous deux de nouveaux tableaux. – Geo

2

Il serait

%w(hello stack overflow !).reject {|x| x == 'overflow'} 

qui préservera le tableau pour vous et ne supprime que la chaîne où il est égal à « débordement »

+0

C'est à peu près la même chose que je l'ai suggéré. –

+0

Je ne pense pas qu'il existe un moyen plus court que celui-ci :(Laissez-moi savoir si vous en trouvez un parce que je suis intéressé à le découvrir aussi. – RubyFanatic

Questions connexes