Сортировать массив в 4 группы с помощью SORT_BY - PullRequest
0 голосов
/ 20 июня 2019

У меня есть 2D-массив, и мне нужно отсортировать по значениям в этих массивах, используя sort_by!(например, когда второе значение массива равно nil, оно принадлежит первой группе)

Я сделал это с каждым методом, но мне нужен более красивый / читаемый код.

Что у меня есть до сих пор: образец Арри: [[164, ноль, 6], [163, ноль, 6], [162, ноль, 6], [161, ноль, 7], [160, «FSDL», 6]]

        matches.each do |match|
          first_group << match.first if match.second.blank? && match.last == 6
          second_group << match.first if match.second.present? && match.last == 6
          third_group << match.first if  match.last == 4
          forth_group << match.first if  match.last == 7
        end

return first_group + second_group + third_group + forth_group

Я хотел сделать что-то вроде этого:

match.sort_by!{| матч |(match.second == nil && match.last == 6) (второе_условие) (третье_условие) (четвертое_условие)}

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Не совсем ясно ожидаемый результат, но если он вернет его, я добавлю объяснение.

matches = [[164, nil, 6], [163, nil, 6], [162, nil, 6], [161, nil, 7], [160, "FSDL", 6] ]

matches.group_by(&:last).tap { |h| h[6] = h[6].group_by { |e| e[1].nil? } }
         .tap { |h| h.default = [] }
         .then { |h| h[6][true] + h[6][false] + h[4] + h[7] }
         .map(&:first)

#=> [164, 163, 162, 160, 161]
0 голосов
/ 20 июня 2019

Я использовал ноль?вместо пустого?если вы хотите, вы можете использовать пустой?а присутствует?согласно вашему требованиюсортировка может быть сделана следующим образом:

matches.sort_by do |match|
    if(match[1].nil? && match.last == 6)
        "1 #{match.first}"
    elsif(not match[1].nil? && match.last == 6)
        "2 #{match.first}"
    elsif(match.last == 4)
        "3 #{match.first}"
    elsif(match.last == 7)
        "4 #{match.first}"
    else
        "5 #{match.first}"
    end
end

С указанным выше кодом, если что-либо, не соответствующее условиям, будет добавлено к последнему

. Будет выдан следующий вывод для данного образца

[[162, nil, 6], [163, nil, 6], [164, nil, 6], [160, "FSDL", 6], [161, nil, 7]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...