如果我在数组中有nil对象,如何在ruby中排序数组?

时间:2014-06-18 05:28:22

标签: ruby arrays

如果我在ruby中有这样的数组,如何排序数组?

示例:

my_array = ["12 months", "13 months", nil, nil, "12"]

我希望得到这样的结果:

 my_array = ["12", "12 months", "13 months", nil, nil]

当我尝试:

my_array.sort{|x, y| x <=> y}

我得到这样的错误:

ArgumentError Exception: comparison of String with nil failed

如何解决?

之前感谢

2 个答案:

答案 0 :(得分:1)

处理零,这会让你接近......

2.1.2 :010 > my_array.sort { |x,y| x && y ? (x <=> y) : (x ? -1 : 1) }
 => ["12", "12 months", "13 months", nil, nil] 

这并不确切,'12'基于<=>比较而出现在其余部分之前。如果你想要更多的控制,你需要有一个更复杂的比较块。

答案 1 :(得分:1)

这是一个很好的简短方法,但它只有在你能提出一个字符串保证“大于”数组中的所有字符串时才会起作用(这很简单):

my_array.sort_by { |x| x || "Z" }
=> ["12", "12 months", "13 months", nil, nil]