哈希数组的排序

时间:2019-04-07 02:00:04

标签: ruby-on-rails arrays sorting hash

我有一个哈希数组,无法按特定键排序,

哈希数组是:

@final_array = [{:Region=>"region - 1", :ItemSize=>"Box", :Price=>""}, {:Region=>"region - 1", :ItemSize=>"Pack", :Price=>""}, {:Region=>"region - 1", :ItemSize=>"ball", :Price=>""}, {:Region=>"region - 1", :ItemSize=>"ball -1", :Price=>""}, {:Region=>"region - 1", :ItemSize=>"new size", :Price=>""}, {:Region=>"region - 1", :ItemSize=>"new size 1", :Price=>""}, {:Region=>"region - 1", :ItemSize=>"wels", :Price=>""}]

@final_array = @final_array.sort_by { |x, y| x[:ItemSize] }

排序后,我通过选择查询检查数组。

a = []

@final_array.select{ |x, y| a << x[:ItemSize] }

a
# => ["Box", "Pack", "ball", "ball -1", "new size", "new size 1", "wels"]

它不能正常工作。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

如果您比较两个仅用str1 <=> str2进行排序的字符串,则大写字母位于小写字母之前:A B C ... Y Z a b c ... y z。这就是为什么您在Box之前获得Packball的原因。

如果您希望所有内容都区分大小写,则将其设置为相同大小写。

@final_array.sort_by { |x, y| x[:ItemSize].downcase }

无论如何,我个人不喜欢对哈希进行排序,我最好以数组的形式获取所需的值,然后对该数组进行排序。

ordered = @final_array.map{|x| x[:ItemSize] }.sort_by{|x| x.downcase }

答案 1 :(得分:0)

您可以按照以下方式尝试: sorted_arr = @ final_array.collect {| arr | arr [:ItemSize]}。sort {| a1,a2 | a1.downcase <=> a2.downcase}

答案 2 :(得分:0)

@final_array = @final_array.sort_by { |x, y| x[:ItemSize].downcase }

这可确保您传递给sort_by的大小写都是相同的。它不会更改ItemSize值的大小写。