Składnia mapowania:
a = ["a", "b", "c", "d"] #=> ["a", "b", "c", "d"]
a.map {|item|"a" == item} #=> [true, false, false, false]
a.select {|item|"a" == item} #=> ["a"]
Zapytaj, czy mam:
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"}
Chcę usunąć każdy wpis, który ma pustą wartość ilości w tej tablicy lub wybrać tylko te z jakąś wartością.
Próbowałem:
details.map {|item|"" == item}
Po prostu zwraca dużo fałszu, a kiedy używam tego samego, po prostu zmień mapę, aby wybrać, otrzymuję:
[]
:qty
nawet tam nie występuje.Odpowiedzi:
Wygląda na to, że
details
jest to tablica skrótów. Więcitem
wewnątrz twojego bloku będzie cały haszysz. Dlatego, aby sprawdzić:qty
klucz, wykonaj coś takiego:To da ci wszystkie elementy, w których
:qty
klucz nie jest pustym ciągiem.oficjalna dokumentacja wyboru
źródło
EDYCJA: Właśnie zdałem sobie sprawę, że chcesz filtrować
details
, co jest tablicą skrótów. W takim razie możesz to zrobićSama wewnętrzna struktura danych nie jest tablicą, ale skrótem. Możesz również użyć
select
tutaj, ale w tym przypadku blok otrzymuje klucz i wartość:Lub używając
reject
, co jest odwrotnościąselect
(wyklucza wszystkie elementy, dla których zachodzi dany warunek):Zauważ, że to jest Ruby 1.9. Jeśli musisz zachować zgodność z 1.8, możesz zrobić:
źródło
details
samą tablicę.Kiedy masz do czynienia z hashem
{}
, użyj zarówno klucza, jak i wartości do bloku wewnątrz||
.źródło