Sintaks untuk pemetaan:
a = ["a", "b", "c", "d"] #=> ["a", "b", "c", "d"]
a.map {|item|"a" == item} #=> [true, false, false, false]
a.select {|item|"a" == item} #=> ["a"]
Pertanyaan bagaimana jika saya memiliki:
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"}
Saya ingin menghapus setiap entri yang memiliki nilai qty kosong pada larik ini atau hanya memilih yang memiliki beberapa nilai di dalamnya.
Saya mencoba:
details.map {|item|"" == item}
Hanya mengembalikan banyak kesalahan dan kemudian ketika saya menggunakan yang sama hanya mengubah peta untuk memilih saya dapatkan:
[]
:qty
bahkan tidak muncul di sana.Jawaban:
Sepertinya
details
adalah serangkaian hash. Jadiitem
di dalam blok Anda akan ada seluruh hash. Oleh karena itu, untuk memeriksa:qty
kunci tersebut, Anda akan melakukan sesuatu seperti berikut:Itu akan memberi Anda semua item di mana
:qty
kuncinya bukan string kosong.dokumentasi pemilihan resmi
sumber
EDIT: Saya baru menyadari Anda ingin memfilter
details
, yang merupakan array hashes. Dalam hal ini Anda bisa melakukannyaStruktur data bagian dalam itu sendiri bukanlah Array, tetapi Hash. Anda juga dapat menggunakan di
select
sini, tetapi blok diberi kunci dan nilai dalam kasus ini:Atau menggunakan
reject
, yang merupakan kebalikan dariselect
(tidak termasuk semua item yang kondisi tertentu berlaku):Perhatikan bahwa ini adalah Ruby 1.9. Jika Anda harus menjaga kompatibilitas dengan 1.8, Anda dapat melakukan:
sumber
details
array itu sendiri.Saat menangani hash
{}
, gunakan kunci dan nilai ke blok di dalam||
.sumber