将对象转换为Ruby中的哈希

问题描述 投票:0回答:1

在Ruby中(没有Rails),有一种简单的方法可以将对象转换为哈希吗?我已经做了一些搜索,并且类似的Rails解决方案让OP尝试使用.attributes。普通的Ruby中有与此类似的东西吗?有宝石吗?

每个对象代表我在此处创建的CSV文件中的一行:

game_teams_data = CSV.read(location[:game_teams], headers: true, header_converters: :symbol)
    @@game_teams = game_teams_data.map do |row|

然后我将以可枚举的方式访问此对象

@@game_teams.each do |game|
     game
end

不确定这是否会影响下面的转换方式。

我的对象#<GameTeam:0x00007ffe9c97d158 @game_id="2012030154", @team_id="30", @hoa="home", @result="LOSS">

我正在尝试实现的输出hash = {game_id => "2012030154", team_id => "30", hoa => "home", result => "LOSS"}

ruby hash rubygems
1个回答
0
投票

如果无法更新GameTeam以添加to_h方法,则可以获取所需的实例变量并自行创建:

class GameTeam
  def initialize(game_id, hoa, result, team_id)
    @game_id = game_id
    @hoa = hoa
    @result = result
    @team_id = team_id
  end
end

obj = GameTeam.new('2012030154', 'home', 'LOSS', '30')
%i[game_id hoa result team_id].map { |ivar| [ivar, obj.instance_variable_get("@#{ivar}")] }.to_h
# {:game_id=>"2012030154", :hoa=>"home", :result=>"LOSS", :team_id=>"30"}
© www.soinside.com 2019 - 2024. All rights reserved.