Aku punya ini:
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
dan saya ingin mendapatkan ini: [["a","b","c"],["b","c"]]
Sepertinya ini harus berfungsi tetapi tidak:
hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
Ada saran?
hash.values
menjadi IMO yang lebih baik). Tapi saya ingin menunjukkan ketika Anda memberikan blokHash#each
itu hanya akan mengembalikan nilai penuh dari hash. Jika Anda ingin melakukan operasi pada setiap item dan mengembalikannya sebagai array, gunakanHash#collect
atau aliasnyaHash#map
. Lebih banyak hal tentang Enumerables di sini .Jawaban:
Juga, sedikit lebih sederhana ....
Dok Ruby di sini
sumber
map
), karena saya sangat menyukai ini!Hash#values
tidak hanya lebih sederhana, tetapi lebih efisien. Bandingkantime ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.values'
dengantime ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.map{|k,v| v}'
Saya akan menggunakan:
sumber
Hash#values
.Enumerable#collect
mengambil satu blok, dan mengembalikan larik hasil menjalankan blok sekali pada setiap elemen enumerable. Jadi kode ini hanya mengabaikan kunci dan mengembalikan array dari semua nilai.The
Enumerable
Modul cukup mengagumkan. Mengetahuinya dengan baik dapat menghemat banyak waktu dan banyak kode.sumber
hash.values
pada akhirnya adalah jawaban yang benar di sini.hash.map(&:second)
:)sumber
Itu sesederhana
ini akan mengembalikan array baru yang diisi dengan nilai dari hash
jika Anda ingin menyimpan array baru itu
sumber
Ada juga yang ini:
Mengapa ini berhasil:
The
&
panggilanto_proc
pada objek, dan dibagikan sebagai blok ke metode.sumber