Сортировка массива хэшей - PullRequest
1 голос
/ 07 апреля 2019

У меня есть массив хэшей, сортировка по определенному ключу не работает должным образом,

Массив хэша:

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

После сортировки я проверяю массив по запросу select.

a = []

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

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

Он не работает должным образом.

Как мне решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

Вы можете попробовать следующим образом: sorted_arr = @ final_array.collect {| arr | arr [: ItemSize]}. sort {| a1, a2 | a1.downcase <=> a2.downcase}

0 голосов
/ 08 апреля 2019
@final_array = @final_array.sort_by { |x, y| x[:ItemSize].downcase }

Это гарантирует, что регистр, который вы передаете в sort_by, одинаков. Это не меняет регистр значений ItemSize.

0 голосов
/ 07 апреля 2019

Если вы сравниваете две строки для сортировки только с 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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...