我被朋友给了一个编码挑战,我一直在努力执行它。我应该采取一个数组,并操纵数据,并构建一个自定义哈希到他的规格。使用Ruby将“主列表”样式嵌套数组转换为嵌套哈希
开始数据
[
['first_name', 'last_name', 'phone_number', 'level_of_caringness'],
['Phteven', 'Cartwright', 911, 'None'],
['Carol', 'Smellsbad', 666, 'Hateful'],
['Bambam', 'Idontwanttomaketheseanymore', 134, 'QWERQWER']
]
最终目标
{911: { first_name: "Phteven", last_name: 'Cartwright', phone_number: 911, level_of_caringness: 'None'},
666: {first_name: "Carol", last_name: 'Smellsbad', phone_number: 666, level_of_caringness: 'Hateful'}
134: {first_name: "Bambam", last_name: 'Idontwanttomaketheseanymore', phone_number: 134, level_of_caringness: 'QWERQWER'}
}
def array_to_hash3(array)
keys = array.shift
array.each_with_object({}) {|v, h| h[[array][2]] = {keys[0] => v[0], keys[1] => v[1], keys[2] => v[2], keys[3] => v[3]}}
端
这让我:
{nil=>{"first_name"=>"Bambam", "last_name"=>"Idontwanttomaketheseanymore", "phone_number"=>134, "level_of_caringness"=>"QWERQWER"}}
所以我在园球,但也不能令人信服。
感谢您的输入!
编辑
我能得到很多与此
def array_to_hash3(array)
key = array.shift
array.each_with_object({}) {|v, h| h[v[2]] = {key[0] => v[0], key[1] => v[1], key[2] => v[2], key[3] => v[3]}}
end
结果
所以有一件事我留下的,是更接近原始请求想要将电话号码用作符号而不是fixnum /整数键。那里有任何想法?
编辑
终于得到它
def array_to_hash4(array)
key = array.shift
array.each_with_object({}) do |record, h|
h[record[2]] = Hash[key.zip(record)]
end
end
{
911=>{"first_name"=>"Phteven",
"last_name"=>"Cartwright",
"phone_number"=>911,
"level_of_caringness"=>"None"},
666=>{"first_name"=>"Carol",
"last_name"=>"Smellsbad",
"phone_number"=>666,
"level_of_caringness"=>"Hateful"},
134=>{"first_name"=>"Bambam",
"last_name"=>"Idontwanttomaketheseanymore",
"phone_number"=>134,
"level_of_caringness"=>"QWERQWER"}
}
@CarySwoveland谢谢。我根据你的意见改变了解决方案。 – davidrac