我有一个列表,其中包含一组项目,例如“学生ID”,“姓名”,“地址”,“分数”,“徽章ID”。如何使用不同的密钥从此现有列表创建哈希表(以单独的变量名保留原始列表)?
我试过了
new_school=Hash.new(old_school) // ruby
但我无法找到如何将badge_ID字段指定为哈希的新密钥。
提前感谢您的帮助
答案 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]