我对Ruby还是很陌生,找不到适合我问题的答案。假设我的哈希名为
users_hsh = {}
。
我正在数据库中遍历所有用户,并创建以下内容。
users.each do |user|
users_hsh[user.full_name] = {
completed_activities: some_integer_value,
active_activities: some_integer_value,
future_activities: some_integer_value
}
end
现在,我创建了一个名为
total_sum_not_zero_user_hsh = {}
。
我想遍历users_hsh中的所有用户,并检查每个用户的completed_activities + active_activities + future_activities的总和是否不为0,并且如果此条件成立,我想将此用户添加到total_sum_not_zero_user_hsh中。我已完成以下操作,但似乎无法正常工作。
users_hsh.each do |usr|
if usr.values.sum != 0
total_sum_not_zero_user_hsh[usr] = {
completed_activities: some_integer_value,
active_activities: some_integer_value,
future_activities: some_integer_value
}
end
end
我在做什么错?预先感谢!
答案 0 :(得分:0)
让我们使用您的示例:
users_hash = {
"Elvin Jafarli" => {
completed_activities: 10,
active_activities: 2,
future_activities: 0
}
}
请仔细考虑您的数据结构实际上是什么:这是将用户名映射到某些用户属性的哈希。如果遍历这些值,则不仅会得到usr
,而且还会精确返回此映射。
描述性地命名变量很有帮助:
users_hsh.each do |user_name, user_attributes|
if user_attributes.values.sum != 0
# ...
end
end
通过尝试,您将看到如下错误:NoMethodError: undefined method 'values' for #<Array:0x00007fe14e22f538>
。发生的事情是每个usr
实际上是一个Array
,例如:
["Elvin Jafarli", {completed_activities: 10, active_activities: 2, future_activities: 0}]