La syntaxe de 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 qui ont une valeur.
J'ai essayé:
details.map {|item|"" == item}
Retourne juste beaucoup de faux et quand j'utilise la même chose, changez simplement de carte pour sélectionner je reçois:
[]
Il semble que details
soit un tableau de hachages. Donc, item
à l'intérieur de votre bloc sera le hash complet. Par conséquent, pour vérifier la touche :qty
, procédez comme suit:
details.select{ |item| item[:qty] != "" }
Cela vous donnera tous les éléments où la touche :qty
n'est pas une chaîne vide.
EDIT: Je viens de réaliser que vous voulez filtrer details
, qui est un tableau de hachages. Dans ce cas, vous pourriez faire
details.reject { |item| item[:qty].empty? }
La structure de données interne elle-même n'est pas un tableau, mais un hachage. Vous pouvez également utiliser select
ici, mais la clé et la valeur sont données au bloc dans ce cas:
irb(main):001:0> h = {:sku=>"507772-B21", :desc=>"HP 1TB 3G SATA 7.2K RPM LFF (3 .", :qty=>"", :qty2=>"1", :price=>"5,204.34 P"}
irb(main):002:0> h.select { |key, value| !value.empty? }
=> {:sku=>"507772-B21", :desc=>"HP 1TB 3G SATA 7.2K RPM LFF (3 .",
:qty2=>"1", :price=>"5,204.34 P"}
Ou en utilisant reject
, qui est l'inverse de select
(exclut tous les éléments pour lesquels la condition donnée est vérifiée):
h.reject { |key, value| value.empty? }
Notez qu'il s'agit de Ruby 1.9. Si vous devez maintenir la compatibilité avec 1.8, vous pouvez faire:
Hash[h.reject { |key, value| value.empty? }]
Lorsque vous traitez avec un hachage {}
, utilisez à la fois la clé et la valeur du bloc à l'intérieur de ||
.
details.map {|key,item|"" == item}
=>[false, false, true, false, false]