array of array sort_by with nil elements (ruby)
I have code that sorts the way I want. By multiple fields. Cool. But now I realized that sometimes the elements could be nil.
Q1: Any idea how to manage to get nil values at the top of the search? And get rid of this error message :in "<=>": undefined method "<=>" for nil:NilClass (NoMethodError)
Q2: in the code below I sort by 3 elements can I somehow define to sort asc by e[2], decs by e[0] and asc by e[1]. I am sorting csv file and most of the fields will be text fields.
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 }
pu开发者_运维问答ts
array_of_arrays.sort_by {|e| [e[2], e[0], e[1]]} .each {|line| p line }
I think you can put e[2].to_s
in sort_by
. Or if it still generating error, try this:
e[2].nil? ? '' : e[2]
or
e[2].nil? ? ' ' : e[2]
or
e[2].blank? ? ' ' : e[2]
Some of those shoud work ;)
Q2: if column is numeric, than you can add -
sign before that column, so:
array_of_arrays.sort_by {|e| [e[2].to_s, -e[0], e[1]]} .each {|line| p line }
精彩评论