ruby - 如何按值对哈希数组进行排序?

标签 ruby arrays sorting hash

我正在尝试根据给定的键值对哈希数组进行排序,并将首先返回数组顶部的该值,然后是剩余数据。

例子是:

students = [{name: "John Doe", age: 16, adviser: "Mrs. Robinson"},
            {name: "John Smith", age: 18, adviser: "Mrs. Williams"},
            {name: "Michael Rodriguez", age: 17, adviser: "Mr. Lee"}]

def sort_by_adviser(data, name)
  ...
end

> sort_by_adviser(students, "Mr. Lee")
=> [{name: "Michael Rodriguez", age: 17, adviser: "Mr. Lee"},
    {name: "John Doe", age: 16, adviser: "Mrs. Robinson"},
    {name: "John Smith", age: 18, adviser: "Mrs. Williams"}]

> sort_by_adviser(students, "Mrs. Williams")
=> [{name: "John Smith", age: 18, adviser: "Mrs. Williams"},
    {name: "Michael Rodriguez", age: 17, adviser: "Mr. Lee"},
    {name: "John Doe", age: 16, adviser: "Mrs. Robinson"}]

这里的输出将顾问的名字放在列表的顶部,然后是数组中的其他哈希值。

> sort_by_keyvalue(data, "Z")
=> [{letter: 'Z'},
    {letter: 'A'},
         .
         .
         .
    {letter: 'Y'}]

> sort_by_keyvalue(data, 5)
=> [{number: 5, value: 'value1'},
    {number: 5, value: 'value2'},
    {number: 5, value: 'value3'},
    {number: 9, value: 'value1'},
    {number: 9, value: 'value2'},
    {number: 8, value: 'value1'},
    {number: 8, value: 'value2'},
    {number: 7, value: 'value1'},
    {number: 6, value: 'value1'},
    {number: 4, value: 'value1'},
    {number: 3, value: 'value1'},
    {number: 2, value: 'value1'},
    {number: 1, value: 'value1'},
    {number: 1, value: 'value2'},
    {number: 0, value: 'value1'}]

有人知道怎么做吗?

最佳答案

另一个实现:)

def sort_by_adviser(data, name)
    data.each_with_index do |hash,index|
      if hash[:adviser]==name
         data.delete_at index #delete from array
         data.unshift hash
         break
      end
    end
   data
end

 > sort_by_adviser(students, "Mr. Lee")  
 #=> [{:name=>"Michael Rodriguez", :age=>17, :adviser=>"Mr. Lee"}, {:name=>"John Doe", :age=>16, :adviser=>"Mrs. Robinson"}, {:name=>"John Smith", :age=>18, :adviser=>"Mrs. Williams"}] 

关于ruby - 如何按值对哈希数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802065/

相关文章:

ruby - 返回多个结果是一种反模式吗?

ruby-on-rails - 如何将 Users 表加入 100 条排名记录的列表以避免 100 多个额外的用户查询?

arrays - Lisp 为什么我的对象是同一个实例?

sorting - OpenCL中元素的排序和计数

python - 在 Pandas pivot_table 中排序

ruby - 循环扫描并单独替换匹配项

mysql - 错误 1064 (42000) 未能授予权限

c - C 中二维数组的大小

arrays - 当没有两个元素相邻时,如何获取用于查找数组元素最大总和的数字/索引

c++ - 当两个整数 vector 的第一个元素都是负数时,如何正确使用 < 和 > 运算符?