好的,因此在Ruby Hashes工作8个月后仍然有点谜。
我从数据库中提取了10条记录,每条记录都有自己的类别字段。许多记录共享相同的类别,因此我希望它们按类别在哈希中分组。
我知道Key的内容总是独一无二的,这就是Hash成为哈希的原因。我正在努力做的是为哈希中的现有密钥添加值。
def self.categorise_events
hash = {}
self.limit(10).map do |event|
if hash.key?(event.event_type) #check if the key already exists
hash[event.event_type][event] #add the event record to that key
else
hash[event.event_type] = event #create the key if it doesn't exist and add the record
end
end
hash
end
这更像是我想要实现的目标。我已经有了其他的作品,这些作品已经接近但仍然没有做到。
答案 0 :(得分:2)
您可以添加现有的哈希,例如
hash[key] = value
但在你的情况下,你的值是一组值,所以它是一个数组
hash[key] = []
hash[key] << value
因此您可以使用
添加到现有组unless hash.key?(event.event_type)
hash[event.event_type] = []
end
hash[event.event_type] << event
现在,可以使用documentations上显示的内置方法#group_by
来完成此操作。但在您的情况下,因为它使用ActiveRecord,您可以考虑使用#group
使用SQL对记录进行分组,并大大提高分组的性能
self.limit(10).group(:event_type)
查看文档here。
答案 1 :(得分:1)
Key始终是uniq。因此,如果要向键添加值,则该值应为Array。
在这种情况下,您可以使用group_by
。尝试
hash = self.limit(10).group_by{|e| e.event_type}
它返回一个哈希,其键是event_type,值是记录数组。