我有一个哈希数组,无法按特定键排序,
哈希数组是:
@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"]
它不能正常工作。
我该如何解决这个问题?
答案 0 :(得分:0)
如果您比较两个仅用str1 <=> str2
进行排序的字符串,则大写字母位于小写字母之前:A B C ... Y Z a b c ... y z。这就是为什么您在Box
之前获得Pack
和ball
的原因。
如果您希望所有内容都区分大小写,则将其设置为相同大小写。
@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值的大小写。