开发者

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 }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜