我有一個返回超過50k記錄的查詢結果。我這樣做:從Rails數組中收集獨特的活動記錄對象?
@array.collect {|x| x.field_name1}.uniq, @array.collect {|x| x.field_name2}.uniq
..在視圖中爲幾個選擇創建過濾器。 需要相當長的一段時間。有什麼方法可以在一個循環中收集所有獨特的元素以提高性能? 感謝
我有一個返回超過50k記錄的查詢結果。我這樣做:從Rails數組中收集獨特的活動記錄對象?
@array.collect {|x| x.field_name1}.uniq, @array.collect {|x| x.field_name2}.uniq
..在視圖中爲幾個選擇創建過濾器。 需要相當長的一段時間。有什麼方法可以在一個循環中收集所有獨特的元素以提高性能? 感謝
喜歡的東西
unique_field_1_values = Set.new
unique_field_2_values = Set.new
@array.each do |x|
unique_field_1_values << x
unique_field_2_values << x
end
只能通過遍歷數組一次,併爲您提供了兩套與該領域的獨特價值。雖然不知道它是否更快。
選擇獨特的列值的純Ruby/Rails的方法(沒有硬編碼SQL)是:
uniq_fields1 = Model.uniq.pluck(:field_1)
# issues: SELECT DISTINCT field_1 FROM "models"
伴隨@ tokland的評論的線路:
[:field1, :field2].map { |f| YourTable.select(f).uniq }
由於@Frederick指出,是事實上有兩個命中數據庫,但會(可能)更快,如果你有這些領域的索引,幾乎肯定會更快。
你會得到關係,而不是價值(根據作者的代碼,這是需要的)。 – jdoe 2012-07-12 13:04:16
確實。交叉郵件再次讓我。你有我'拔'。你讓我'拔'。 – 2012-07-12 13:45:45
這是一個很好的問題,但.. – Trip 2012-07-12 12:21:44