将对象列表转换为哈希

时间:2016-10-27 21:29:50

标签: ruby

在Ruby中,我有一个名为imagesc((abs(fftA))) 的对象列表,其中包含Things属性和Id属性。

我想制作一个包含value作为键的哈希,并Id作为相应键的值。

我试过了:

Value

其中result = Hash[things.map { |t| t.id, t.value }] things

的列表

但这不起作用。

2 个答案:

答案 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}
相关问题