数组sort_by与nil元素(ruby)

时间:2010-02-11 22:41:29

标签: ruby arrays sorting

我的代码按照我想要的方式排序。由多个领域。凉。但现在我意识到有时元素可能是零。

Q1:任何想法如何设法在搜索顶部获取nil值?并摆脱此错误消息:in "<=>": undefined method "<=>" for nil:NilClass (NoMethodError)

Q2:在下面的代码中我按3个元素排序我可以通过e [2]以某种方式定义asc,按e [0]减去asc,按e [1]减去asc。我正在排序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 个答案:

答案 0 :(得分:6)

我认为您可以将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 }