gpt4 book ai didi

ruby-on-rails - Ruby:比较两个数组的匹配项,并按 DESC 顺序对结果进行排序

转载 作者:数据小太阳 更新时间:2023-10-29 08:41:12 25 4
gpt4 key购买 nike

我有一个用户模型。每个用户都有与之关联的餐厅名称。我有一个显示所有用户的 View (index.html.erb)。

我想根据 current_user 和其他一些用户共有的餐厅数量降序排列此 View 中的用户...(相反!)


例如

User1 (current_user) 去过麦当劳、汉堡王、Arby's

User2 去过 Ivar 的

User3 去过麦当劳、汉堡王


当 User1 加载索引 View 时,用户应显示的顺序是:

User1(3/3 餐厅匹配)

用户 3(2/3 餐厅匹配)

用户 2(0/3 家餐厅匹配)


我的 User.rb 文件

def compare_restaurants
self.restaurants.collect
end

我的 users_controller.rb

def index
@users = User.all.sort_by {|el| (el.compare_resturants & current_user.compare_resturants).length }
end

最佳答案

如果您对使用 sort_by 死心塌地,那么您可以直接取反数字:

def index
@users = User.all.sort_by { |el|
-(el.compare_resturants & current_user.compare_resturants).length
}
end

此技巧仅在您按数值排序时才有效。如果你在字符串上排序,那么你必须使用这样的东西:

reverse_sorted = a.sort_by { |x| something(x) }.reverse

但这会涉及数组的额外副本以及 reverse 会做的额外工作。在这种情况下,您应该使用具有反向比较逻辑的完整排序

如果您尝试使用 sort_by 来避免为每次比较计算昂贵的东西并且您正在对非数字的东西进行排序,那么您总是可以使用 sort带有明确的 Schwartzian Transform只计算一次昂贵的东西。

关于ruby-on-rails - Ruby:比较两个数组的匹配项,并按 DESC 顺序对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5037271/

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