相关疑难解决方法(0)

根据另一个数组的元素对数组进行排序

我有一系列的ID

a1 = [1, 2, 3, 4, 5]  
Run Code Online (Sandbox Code Playgroud)

我有另一个对象数组,其中id为随机顺序

a2 = [(obj_with_id_5), (obj_with_id_2), (obj_with_id_1), (obj_with_id_3), (obj_with_id_4)]  
Run Code Online (Sandbox Code Playgroud)

现在我需要根据a1中id的顺序对a2进行排序.所以a2现在应该成为:

[(obj_with_id_1), (id_2), (id_3), (id_4), (id_5)]  
Run Code Online (Sandbox Code Playgroud)

a1可能是[3,2,5,4,1]或任何顺序,但a2应对应于a1中id的顺序.

我喜欢这个:

a1.each_with_index do |id, idx|
  found_idx = a1.find_index { |c| c.id == id }
  replace_elem = a2[found_idx]
  a2[found_idx] = a2[idx]
  a2[idx] = replace_elem
end  
Run Code Online (Sandbox Code Playgroud)

但是如果a2的元素顺序正好与a1相反,那么这仍然可能会遇到O(n ^ 2)时间.有人可以告诉我最有效的排序方式吗?

ruby arrays sorting algorithm

39
推荐指数
4
解决办法
2万
查看次数

Rails:如何使用 .where 查找 id 数组但已排序?

我正在尝试查找使用的商店列表.where,但我也试图将它们排序为相同的 id 数组。

IE

  ids = ["4", "15", "10", "20", "1"]
  stores = Store.published.where(id: ids)
Run Code Online (Sandbox Code Playgroud)

看起来商店是按 id 的升序返回的,就像这样 [{id: 20}, {id: 15} {id: 10}, {id: 4}, {id: 1}]。我希望按照与ids订购方式相同的方式对退回的商店进行订购。另请注意,每个商店中的 id 都是整数,而数组中的 idids是字符串。

ruby ruby-on-rails

2
推荐指数
1
解决办法
1652
查看次数

标签 统计

ruby ×2

algorithm ×1

arrays ×1

ruby-on-rails ×1

sorting ×1