gpt4 book ai didi

ruby-on-rails - 给定有序的 id 列表对对象数组进行排序

转载 作者:数据小太阳 更新时间:2023-10-29 06:47:35 24 4
gpt4 key购买 nike

我有一组对象 @users,每个对象都有其 id 属性。

@users = [#<User id:1>, #<User id:2>]

我还有一个有序的 ids 数组。

ids = [2,1]

¿是否有一种神奇的方法可以使用该 ID 列表对集合进行排序?如果可能,不再次调用数据库。

谢谢!!!

最佳答案

其实你不需要排序,建立一个中间的索引散列,它是O(n):

users_by_id = Hash[@users.map { |u| [u.id, u] }]
users_by_id.values_at(*ids)

如果您仍想尝试排序方法,Schwartzian transform就足够了:

@users.sort_by { |u| ids.index(u.id) }

但是,在循环中使用 index 是一个危险信号:O(n^2) 时间。我们可以构建一个中间散列来返回到 O(n*log n):

indexes = Hash[ids.each_with_index.to_a]
@users.sort_by { |u| indexes[u.id] }

关于ruby-on-rails - 给定有序的 id 列表对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7788456/

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