有没有一种简单的方法可以按字母顺序对字符串中的字符进行排序?

96

我有这样的字符串:

var a = "ABCFE";

有没有简单的方法可以将这个字符串排序为:

ABCEF

谢谢

6个回答

178

你可以使用LINQ:

String.Concat(str.OrderBy(c => c))
如果您想要删除重复项,请添加.Distinct()

7
这比Array.Sort慢很多。请参考Roy的回答。 - Kellen Stuart

140

可以,将字符串复制到char数组中,对char数组进行排序,然后将其复制回字符串。

static string SortString(string input)
{
    char[] characters = input.ToArray();
    Array.Sort(characters);
    return new string(characters);
}

21
根据我的微基准测试,这种方法比使用“OrderBy”快大约3倍。 - Brian
8
+1 因为负面评分,我不明白原因。我进行了基准测试,这比LINQ要优越得多。使用 OrderBy 对 "patrick" 进行排序所需时间为 00:00:00.0000666,而 Array.Sort 仅需 00:00:00.0000022 - Patrick Magee
4
方法名称似乎是ToCharArray(),而不是ToArray()。 - hsandt
2
对于字符串,您可以使用ToCharArray()ToArray(),它们的结果相同,但前者可能会提供更好的性能。请参阅https://dev59.com/-loU5IYBdhLWcg3wxIyA。 - Arin

36
new string (str.OrderBy(c => c).ToArray())

5
如果我们考虑性能,使用新字符串会比字符串拼接(string.concat)更快。因此,新字符串将获胜。 - Will Yu
还需要将有序可枚举对象转换为数组吗? - BigChief

12

你可以使用这个

string x = "ABCGH"

char[] charX = x.ToCharArray();

Array.Sort(charX);
x = new string(charX);

这将对你的字符串进行排序。


3

这是另一种方法。您可以使用SortedSet:

var letters = new SortedSet<char> ("ABCFE");
foreach (char c in letters) Console.Write (c); // ABCEF

1
var sortedString1 = string.Join("", str1.OrderBy(x => x).ToArray());

这将返回一个已排序的字符串


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