我有一个哈希数组,按特定键排序不正常工作,
哈希数组是:
@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"]
它没有正常工作。
我该如何解决这个问题?
如果你比较2个字符串进行排序只需要qazxsw poi,大写字母就会出现在大写字母之前:A B C ... Y Z a b c ... y z。这就是为什么你在str1 <=> str2
之前得到Box
和Pack
。
如果您想要“不区分大小写”,请将所有内容都转换为相同的大小写。
ball
无论如何,我个人不喜欢排序哈希,我最好得到我需要的值作为数组,然后命令该数组。
@final_array.sort_by { |x, y| x[:ItemSize].downcase }
您可以尝试以下方式:sorted_arr = @ final_array.collect {| arr | arr [:ItemSize]}。sort {| a1,a2 | a1.downcase <=> a2.downcase}
ordered = @final_array.map{|x| x[:ItemSize] }.sort_by{|x| x.downcase }
这可以确保传递给@final_array = @final_array.sort_by { |x, y| x[:ItemSize].downcase }
的情况完全相同。它不会更改ItemSize值的大小写。