如何按长度对 Ruby 字符串数组进行排序?

42

我该如何对这个进行排序:

arr = ["aaa","aa","aaaa","a","aaaaa"];

进入这个?

arr = ["a","aa","aaa","aaaa","aaaaa"];
3个回答

82
arr = arr.sort_by {|x| x.length}

或在 1.8.7+ 版本中:

arr = arr.sort_by(&:length)

1
抱歉评论这么旧的帖子,但是你能解释一下 &:length 是什么以及为什么它起作用吗?它是在调用 length 方法吗?& 的意义是什么? - Dan R
4
是的,它在每个由sort_by产生的项上调用length方法 - 就像第一行代码一样。前缀的&运算符将一个对象(具体来说是Proc对象或任何具有 to_proc 方法的对象,比如符号对象)转换为一个块。对于符号而言,它将产生一个块,在其参数上调用具有给定名称的方法(因为这就是Symbol#to_proc的定义方式)。 - sepp2k

12

您还可以使用sort

arr.sort{|x, y| x.length <=> y.length}

5

arr = arr.sort{|x,y| x.length - y.length}也可以实现相同的效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接