如果我在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
如何解决?
之前感谢
答案 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]