rideshare_data = {
DR0001: [
{
DATE: "02_03_2016",
COST: 10,
RIDER_ID: "RD0003",
RATING: 3
},
{
DATE: "02_03_2016",
COST: 30,
RIDER_ID: "RD0015",
RATING: 4
},
{
DATE: "02_05_2016",
COST: 45,
RIDER_ID: "RD0003",
RATING: 2
}
],
DR0002: [
{
DATE: "02_03_2016",
COST: 25,
RIDER_ID: "RD0073",
RATING: 5
},
{
DATE: "02_04_2016",
COST: 15,
RIDER_ID: "RD0013",
RATING: 1
},
{
DATE: "02_5_2016",
COST: 35,
RIDER_ID: "RD0066",
RATING: 3
}
]
}
rideshare_data.each do |driver_id, driver_data|
money_earned = 0
driver_data.each do |rides|
rides.each do |ride, ride_data|
money_earned = [ride_data][:COST].reduce(:+)
puts "#{driver_id} earned #{money_earned} total"
end
end
end
所以我有一个数组和哈希的数据集,我试图通过对:COST键求和来找到每个驱动程序所赚取的总收入。无论我在最后一个块中尝试什么,都会得到错误,即没有将Symbol / Hash / String隐式转换为Integer。帮助将不胜感激!
答案 0 :(得分:1)
由于在数组上使用[]
,因此Ruby希望您传递一个整数,因为只能通过其索引访问数组,这就是为什么它会返回此类错误。
no implicit conversion of Symbol into Integer (TypeError)
[ride_data]
的结果为您提供了数组中的字符串,因此,您将无法传递符号,无法像访问Hash对象那样访问键。
由于rideshare_data
是一个哈希,每个键包含不同的值(驱动程序ID),因此您可以迭代每个键的值并获取每个COST键的值,然后执行所需的操作:< / p>
rideshare_data.each_with_object([]) do |(key, value), array|
array << "#{key} earned #{value.sum { |ride| ride[:COST] }} total"
end.each { |total| puts total }
# DR0001 earned 85 total
# DR0002 earned 75 total
在那里,您使用一个初始的空数组作为存储数据的备忘,在rideshare_data
中的每个值上进行迭代,并求和,然后收集COST键的每个值并对它们求和。最后的each
仅用于显示结果数组中的每个值。
根据您的Ruby版本,可能需要map和sum而不是sum(value.map { |ride| ride[:COST] }.sum
)。