我的代码按照我想要的方式排序。由多个领域。凉。但现在我意识到有时元素可能是零。
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 }
答案 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 }