在Ruby中,我有一个名为imagesc((abs(fftA)))
的对象列表,其中包含Things
属性和Id
属性。
我想制作一个包含value
作为键的哈希,并Id
作为相应键的值。
我试过了:
Value
其中result = Hash[things.map { |t| t.id, t.value }]
是things
但这不起作用。
答案 0 :(得分:2)
class Thing
attr_reader :id, :value
def initialize(id, value)
@id = id
@value = value
end
end
cat = Thing.new("cat", 9)
#=> #<Thing:0x007fb86411ad90 @id="cat", @value=9>
dog = Thing.new("dog",1)
#=> #<Thing:0x007fb8650e49b0 @id="dog", @value=1>
instances =[cat, dog]
#=> [#<Thing:0x007fb86411ad90 @id="cat", @value=9>,
# #<Thing:0x007fb8650e49b0 @id="dog", @value=1>]
instances.map { |i| [i.id, i.value] }.to_h
#=> {"cat"=>9, "dog"=>1}
或者,对于2.0之前的Ruby版本:
Hash[instances.map { |i| [i.id, i.value] }]
#=> {"cat"=>9, "dog"=>1}
答案 1 :(得分:0)
result = things.map{|t| {t.id => t.value } }
外部花括号对的内容是一个块,内部对形成一个哈希。 但是,如果一个哈希是期望的结果(如Cary Swoveland所建议的那样),这可能有效:
result = things.each_with_object({}){| t, h | h[t.id] = t.value}