Rubyでは、というオブジェクトのリストがあり、Id
のプロパティとvalue
というプロパティがあります。オブジェクトのリストをハッシュに変換する
Id
をキーとし、対応するキーの値をValue
とするハッシュを作成したいとします。
私が試した:things
はThing
のリストである。しかし、これは動作しませんでした
result = Hash[things.map { |t| t.id, t.value }]
を。前2.0 Rubyのバージョンの
Rubyでは、というオブジェクトのリストがあり、Id
のプロパティとvalue
というプロパティがあります。オブジェクトのリストをハッシュに変換する
Id
をキーとし、対応するキーの値をValue
とするハッシュを作成したいとします。
私が試した:things
はThing
のリストである。しかし、これは動作しませんでした
result = Hash[things.map { |t| t.id, t.value }]
を。前2.0 Rubyのバージョンの
result = things.map{|t| {t.id => t.value } }
中括弧の外側のペアの内容がブロックされ、内側のペアがハッシュを形成します。 しかし、これは動作することができる(ケアリーSwovelandによって示唆されるように)1つのハッシュが所望の結果である場合:
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}
または、:
Hash[instances.map { |i| [i.id, i.value] }]
#=> {"cat"=>9, "dog"=>1}
「うまくいかない」ってどういう意味ですか?それは間違った結果を返しましたか?例外が発生しましたか?後者の場合、例外は何ですか?あなたのコードに間違いはありません。 –