我从数据库中查询 5000 记录,然后转换为Hash,'marker_id'作为键,如果'marker_id'相同,则将它们放入Array中。但转换为Hash时速度很慢。
total_attrs=MarkerAttr.where(marker_layer_id: layer.id)
temp_attrs={}
t=Time.now
for ta in total_attrs
if !temp_attrs.has_key?(ta.marker_id)
temp_attrs["#{ta.marker_id}"]=[]
end
temp_attrs["#{ta.marker_id}"].push(ta)
end
p "to_hash_time::#{Time.now-t}"
# TODO:: to_hash_time::1.563641124
谢谢
答案 0 :(得分:1)
嗯。我想知道Enumerable#group_by是否会更快。试试这个:
total_attrs = MarkerAttr.where(marker_layer_id: layer.id).all
temp_attrs = total_attrs.group_by(&:marker_id)