如何按字母顺序对字符串的字符进行排序?

66
对于数组,有一个很好用的sort方法来重新排列元素的顺序。我想通过一种简单的方法实现同样的结果来对字符串进行字母表排序。
例如,我有一个字符串str = "String",我想用一个简单的方法按字母表排序为"ginrSt"
是否有本地化的方法可以实现这个,或者我应该包含Enumerable中的mixin?
5个回答

134

chars 方法 返回字符串中字符的枚举。

str.chars.sort.join
#=> "Sginrt"

进行不区分大小写的排序:

str.chars.sort(&:casecmp).join
#=> "ginrSt"

18
将字符串按不区分大小写的方式排序并拼接:str.chars.sort(&:casecmp).join - tokland

15

还有一个(只是为了好玩)

str = "String"
str.chars.sort_by(&:downcase).join
#=> "ginrSt"

我更喜欢sort_by方法,因为它更清晰易懂。 - Sam P

3
str.unpack("c*").sort.pack("c*")

6
翻译自英文到中文。仅返回翻译后的文本:请为其添加一些解释。你想要表达什么? - Dinesh Raja

3
你可以将字符串转换为数组进行排序:
'string'.split('').sort.join

1

如果您要处理Unicode文本,您可能更喜欢使用String#grapheme_clusters方法:

"a\u0300e".chars.sort.join
=> "aè" # diacritic moved!
"a\u0300e".grapheme_clusters.sort.join
=> "àe" # expected result

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