массив массива sort_by с нулевыми элементами (ruby) - PullRequest
4 голосов
/ 12 февраля 2010

У меня есть код, который сортирует так, как я хочу. По нескольким полям. Здорово. Но теперь я понял, что иногда элементы могут быть нулевыми.

Q1: Есть идеи, как получить нулевые значения в верхней части поиска? И избавиться от этого сообщения об ошибке :in "<=>": undefined method "<=>" for nil:NilClass (NoMethodError)

Q2: в приведенном ниже коде я сортирую по 3 элементам, могу ли я как-то определить сортировку asc по e [2], decs по e [0] и asc по e [1]. Я сортирую CSV-файл, и большинство полей будут текстовыми.

array_of_arrays = [[1,9,'a'],[2,2,'a'], [2,6,''], [1,3,'a'], [2,1,'']] #doesnt work
array_of_arrays = [[1,9,'a'],[2,2,'a'], [2,6,'b'], [1,3,'a'], [2,1,'b']] # works
array_of_arrays.each {|line| p line }
puts
array_of_arrays.sort_by {|e| [e[2], e[0], e[1]]} .each {|line| p line }

1 Ответ

6 голосов
/ 12 февраля 2010

Я думаю, вы можете поставить e[2].to_s в sort_by. Или, если это все еще генерирует ошибку, попробуйте это:

e[2].nil? ? '' : e[2]

или

e[2].nil? ? ' ' : e[2]

или

e[2].blank? ? ' ' : e[2]

Некоторые из этих громких работ;)

Q2 : если столбец числовой, вы можете добавить знак - перед этим столбцом, поэтому:

 array_of_arrays.sort_by {|e| [e[2].to_s, -e[0], e[1]]} .each {|line| p line }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...