La syntaxe du mappage:
a = ["a", "b", "c", "d"] #=> ["a", "b", "c", "d"]
a.map {|item|"a" == item} #=> [true, false, false, false]
a.select {|item|"a" == item} #=> ["a"]
Question que diriez-vous si j'ai:
irb(main):105:0> details[1]
=> {:sku=>"507772-B21", :desc=>"HP 1TB 3G SATA 7.2K RPM LFF (3 .", :qty=>"",
:qty2=>"1", :price=>"5,204.34 P"}
Je veux supprimer toutes les entrées qui ont une valeur de quantité vide sur ce tableau ou sélectionner uniquement celles avec une valeur.
J'ai essayé:
details.map {|item|"" == item}
Renvoie simplement beaucoup de faux, puis lorsque j'utilise la même carte, changez simplement la carte pour sélectionner J'obtiens:
[]
:qty
il n'y apparaît même pas.Réponses:
Il ressemble à
details
un tableau de hachages. Donc, à l'item
intérieur de votre bloc se trouvera tout le hachage. Par conséquent, pour vérifier la:qty
clé, vous feriez quelque chose comme ceci:Cela vous donnera tous les éléments où la
:qty
clé n'est pas une chaîne vide.documentation officielle de sélection
la source
EDIT: Je viens de réaliser que vous voulez filtrer
details
, qui est un tableau de hachages. Dans ce cas tu pourrais faireLa structure de données interne elle-même n'est pas un tableau, mais un hachage. Vous pouvez également utiliser
select
ici, mais le bloc reçoit la clé et la valeur dans ce cas:Ou en utilisant
reject
, qui est l'inverse deselect
(exclut tous les éléments pour lesquels la condition donnée est vérifiée):Notez qu'il s'agit de Ruby 1.9. Si vous devez maintenir la compatibilité avec la version 1.8, vous pouvez faire:
la source
details
tableau lui-même.Lorsque vous traitez avec un hachage
{}
, utilisez à la fois la clé et la valeur du bloc à l'intérieur du fichier||
.la source