我有这样的数据:
hash_data = [
{:key1 => 'value4', :sortby => 4},
{:key1 => 'valuesds6', :sortby => 6},
{:key1 => 'valuedsd', :sortby => 1},
{:key1 => 'value2_data_is_here', :sortby => 2}
]
我想通过键sortby
hash_data = [
{:key1 => 'valuedsd', :sortby => 1},
{:key1 => 'value2_data_is_here', :sortby => 2},
{:key1 => 'value4', :sortby => 4},
{:key1 => 'valuesds6', :sortby => 6}
]
我尝试使用冒泡排序,但Hash
类中是否有任何内置函数用于此类目的?
答案 0 :(得分:10)
hash_data.sort_by { |hash| hash[:sortby] }
#=> [{:key1=>"valuedsd", :sortby=>1}, {:key1=>"value2_data_is_here", :sortby=>2}, {:key1=>"value4", :sortby=>4}, {:key1=>"valuesds6", :sortby=>6}]
如果您不关心初始对象,我建议您使用Array#sort_by!
进行内部修改 - 它更具资源效率:
hash_data.sort_by! { |hash| hash[:sortby] }
如果您有不同类型的数据作为sortby
键的值,则应首先统一数据类型,然后才执行排序。
要让数组按降序排序,请使用Enumerable#reverse
(或reverse!
):
hash_data.sort_by {|hash| hash[:sortby] }.reverse
#=> [{:key1=>"valuesds6", :sortby=>6}, {:key1=>"value4", :sortby=>4}, {:key1=>"value2_data_is_here", :sortby=>2}, {:key1=>"valuedsd", :sortby=>1}]
按降序排序的另一个选项是以下 - 注意减号( @ sagarpandya82 ):
hash_data.sort_by {|hash| -hash[:sortby] }