散列数组的散列

问题描述 投票:1回答:3

我有一个哈希数组,按特定键排序不正常工作,

哈希数组是:

@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"]

它没有正常工作。

我该如何解决这个问题?

ruby-on-rails arrays sorting hash
3个回答
0
投票

如果你比较2个字符串进行排序只需要qazxsw poi,大写字母就会出现在大写字母之前:A B C ... Y Z a b c ... y z。这就是为什么你在str1 <=> str2之前得到BoxPack

如果您想要“不区分大小写”,请将所有内容都转换为相同的大小写。

ball

无论如何,我个人不喜欢排序哈希,我最好得到我需要的值作为数组,然后命令该数组。

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

0
投票

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


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

这可以确保传递给@final_array = @final_array.sort_by { |x, y| x[:ItemSize].downcase } 的情况完全相同。它不会更改ItemSize值的大小写。

© www.soinside.com 2019 - 2024. All rights reserved.