11
Khi gọi each
trên băm trong ruby, bạn có thể nhận chìa khóa và giá trị độc đáo tách ra như thế này:Có thể tách khóa và giá trị của băm khi sử dụng bơm không?
{ :a => 1, :b => 2, :c => 3 }.each do |key, value|
puts "key is #{key} and value is #{value}"
end
=========================
key is :a and value is 1
key is :b and value is 2
key is :c and value is 3
=> {:a=>1, :b=>2, :c=>3}
Tuy nhiên điều này dường như không làm việc khi sử dụng inject
.
{ :a => 1, :b => 2, :c => 3 }.inject(0) do |result, key, value|
puts "key is #{key} and value is #{value}"
result + value
end
=========================
key is [:a, 1] and value is
TypeError: nil can't be coerced into Fixnum
Trong ví dụ đơn giản ở trên tôi không thực sự cần các phím vì vậy tôi chỉ có thể gọi hash.values.inject
, nhưng giả sử tôi cần cả hai, là có một cách sạch hơn để làm điều này hơn bodge khủng khiếp này?
{ :a => 1, :b => 2, :c => 3 }.inject(0) do |result, key_and_value|
puts "key is #{key_and_value[0]} and value is #{key_and_value[1]}"
result + key_and_value[1]
end
Cảm ơn! Mới với Ruby và điều này đã làm tôi khó chịu vì sự xấu xa của nó hoàn toàn trái ngược với phần còn lại của ngôn ngữ. Tôi biết sẽ có một giải pháp đơn giản sạch sẽ như thế này. – Russell
+1 vì đây là một câu trả lời hay, và nó sẽ làm tôi khó chịu khi bị kẹt ở 299 danh tiếng ... – Russell