2011-02-05 3 views
4

J'ai eu du mal à apprendre comment faire face à des tableaux constitués de tableaux.Tableau de tableaux, supprimer un index basé sur le contenu du tableau à l'index?

que j'ai eu ce tableau:

my_array = [['ORANGE',1],['APPLE',2],['PEACH',3] 

Comment pourrais-je faire pour trouver l'indice de my_array qui contient « pomme » et la suppression de cet indice (suppression du sous-ensemble [ « APPLE », 2] parce que ' apple 'était conatined dans le tableau à cet index)?

Merci - J'apprécie vraiment l'aide d'ici.

Répondre

6

Vous pouvez utiliser Array.select pour filtrer les articles:

>> a = [['ORANGE',1],['APPLE',2],['PEACH',3]] 
=> [["ORANGE", 1], ["APPLE", 2], ["PEACH", 3]] 

>> a.select{ |a, b| a != "APPLE" } 
=> [["ORANGE", 1], ["PEACH", 3]] 

select renverra les éléments de la, pour lequel le bloc donné (ici a != "APPLE") retourne true.

+0

C'est génial. J'apprécie vraiment, merci! – Reno

6
my_array.reject { |x| x[0] == 'APPLE' } 
+0

Tho Je pense que le rendement déconstructif de MYYN (je pense que c'est comme ça) est gentil. – DigitalRoss

+1

Une variation de ceci: 'a.reject {| x, y | x == 'APPLE'} ' – miku

+0

Quelque chose de faux/incorrect/inefficace avec l'utilisation de delete_if? –

4

J'ai testé cela, il fonctionne:

my_array.delete_if { |x| x[0] == 'APPLE' } 
+0

L'utilisation de delete_if me semble vraiment lisible par l'homme. J'aime cet endroit - 3 réponses presque instantanées tous différents et tous fonctionnent. J'ai beaucoup appris - merci à tous! – Reno

Questions connexes