从Ruby中的现有列表创建哈希表

时间:2012-04-17 18:48:56

标签: ruby hash

我有一个列表,其中包含一组项目,例如“学生ID”,“姓名”,“地址”,“分数”,“徽章ID”。如何使用不同的密钥从此现有列表创建哈希表(以单独的变量名保留原始列表)?

我试过了

new_school=Hash.new(old_school)  // ruby

但我无法找到如何将badge_ID字段指定为哈希的新密钥。

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以使用ActiveSupport gem将数组(或任何其他可枚举对象)转换为哈希:

objects.index_by do |object|
  <code to calculate the hash key>
end

objects.group_by do |object|
  <code to calculate the hash key>
end

#index_by方法将从列表中生成散列单个对象的值,而#group_by方法将使散列的值成为映射到该散列键的对象的数组

计算散列键的代码可以像引用每个对象的属性一样简单。

答案 1 :(得分:1)

另外,请注意您是否可能意味着为对象获取值数组并将其转换为哈希值。像这样:

[123, 'Jim Bob', '123 Fake St', 90, 321]

进入这个:

{:student_id => 123,
  :name => 'Jim Bob',
  :address => '123 Fake St',
  :score => 90,
  :badge_id => 321}

如果是这样,你可以这样做:

keys = [:student_id, :name, :address, :score, :badge_id]
values = [123, 'Jim Bob', '123 Fake St', 90, 321]
Hash[*keys.zip(values).flatten]