【问题标题】:Sorting an array using another array使用另一个数组对数组进行排序
【发布时间】:2014-07-24 01:31:00
【问题描述】:

我正在寻找一种使用另一个数组对数组进行排序的方法。 Here 是一个对我有用的答案:

  • order_array(我想要的以奇怪顺序排列的 id 数组):a1 = [34, 54, 12, 43]
  • 对象列表(我要订购的):a2 = [ {id: 54, name: "greg"}, {...}, {...}, {...} ]
  • a2.sort_by{|x| a1.index x.id}

这段代码是怎么回事?

【问题讨论】:

  • a1.index(x.id) 返回xa1 数组中的位置。 sort_by 使用该信息对 a2 数组进行排序。
  • ahhh... 所以,a1.index(x.id) 意味着我们正在为每个 id 分配索引值,有点像 [3, 5, 2, 6].index(2) 会给我'2' 作为答案。然后从那里我们只是按这些索引值排序,当然是 0,1,2,3,4,5 等等!

标签: ruby arrays sorting


【解决方案1】:

这里发生的是sort_by 使用您传递给它的块将数组映射到可排序的元素。这样可以使用<=> 方法比较元素。所有可比较对象都必须实现此方法,在本例中为整数。

sort使用排序算法(可能不是冒泡排序,将块的返回值作为被排序的值。

所以,这个表达式:

a2.sort_by { |x| a1.index x.id }

... 会产生与运行相同的结果:

a2.map { |x| a1.index x.id }.sort

... 其中x.index(x.id) 返回a1 数组中当前元素的id 属性的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多