对与整数和字符串混合的数组进行排序 - Ruby

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)

我知道这显然是错的,但我无法用整数和字符串组合来解决它.

And*_*ica 5

将该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)