当前位置: 动力学知识库 > 问答 > 编程问答 >

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 }

puts

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 }
分享给朋友:
您可能感兴趣的文章:
随机阅读: