gpt4 book ai didi

ruby-on-rails - Ruby - 如何加速 ".each"数组的循环?

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:22 25 4
gpt4 key购买 nike

我在尝试提高代码性能的方法中拥有这些模型和后续行。

class Location < ActiveRecord::Base
belongs_to :company
end
class Company < ActiveRecord::Base
has_many :locations
end

在方法中:

locations_company = []

###
found_locations = Location.within(distance, origin: from_result.split(',')).order("distance ASC")
### 0.002659s

###
found_locations.each do |location|
locations_company << location.company
end
### 45.972285s

###
companies = locations_company.uniq{|x| x.id}
### 0.033029s

代码具有此功能 - 首先,抓取指定半径内的所有位置。然后,从每个找到的行中取出公司并将其保存到准备好的数组中。这是有问题的部分 - 每个循环需要 45 秒来处理。

然后从这个新创建的数组中删除重复项。

我仍然想知道是否有更好的方法来解决这种情况,但恐怕我现在看不到,所以我想问问你们如何加快 的速度。 each 循环将数据保存到数组 - ruby​​ 中是否有更好的方法从对象中获取一些信息?

非常感谢您的宝贵时间,我整天都沉浸在这个问题中,但仍然没有更有效的解决方案。

最佳答案

最好的方法是不要循环。您的最终目标似乎是找到指定区域中的所有公司。

found_locations = Location.within(distance, origin: from_result.split(',')).order("distance ASC")
companies = Company.where(id: found_locations.pluck(:company_id).uniq)

关于ruby-on-rails - Ruby - 如何加速 ".each"数组的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27048100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com