1

次のような OpenStruct オブジェクトの配列を使用しています。

a=[<OpenStruct name="test1", x="6", id="1">,<OpenStruct name="test2", x="5", id="2"><OpenStruct name="test1", x="8", id="3">...]

次のように、同じ名前の OpenStruct オブジェクトをグループ化したいと思います。

a=[<OpenStruct name="test1",x=["6","8"], id=["1","3"]>,<OpenStruct name="test2", x="5", id="2">]

どうやってやるの?

4

2 に答える 2

1

group_by および map メソッドを使用できます。コードは自明だと思います。

a = [
  OpenStruct.new(name: "test1", x: "6", id: "1"),
  OpenStruct.new(name: "test2", x: "5", id: "2"),
  OpenStruct.new(name: "test1", x: "8", id: "3")
]

a.group_by(&:name).map do |name, as|
  OpenStruct.new(
    name: name,
    x: as.map(&:x),
    id: as.map(&:id)
  )
end
# => [#<OpenStruct name="test1", x=["6", "8"], id=["1", "3"]>, #<OpenStruct name="test2", x=["5"], id=["2"]>]
于 2013-09-23T14:10:34.917 に答える