Nat*_*ers 3 ruby arrays sorting
我有一个数组必须按低数字到高数字排序,然后按字母顺序排序.必须使用Array#sort_by
i_want_dogs = ["I", "want", 5, "dogs", "but", "only", "have", 3]
Run Code Online (Sandbox Code Playgroud)
我希望它输出:
=> [3,5,"I","but","dogs","have","only","want"]
Run Code Online (Sandbox Code Playgroud)
我试过了:
i_want_dogs.sort_by {|x,y| x <=> y }
Run Code Online (Sandbox Code Playgroud)
我知道这显然是错的,但我无法用整数和字符串组合来解决它.
将该sort方法与定义比较器的块一起使用,该比较器可以执行您想要的操作.我写了一个简单的例子,它在类相同时比较值,在不同时比较类名.
def comparator(x, y)
if x.class == y.class
return x <=> y
else
return x.class.to_s <=> y.class.to_s
end
end
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
i_want_dogs.sort { |x, y| comparator(x, y) }
Run Code Online (Sandbox Code Playgroud)