如何在C#中按字母顺序打印字符串中出现的字符?

Mic*_*ael 1 c# sorting string

谁能帮助我找到最有效的方式来按字母顺序在给定的字符串中打印字符出现以及该字符?

我可以计算字符串中字符的出现,但不能按字母顺序对其进行排序。

string OutputString = string.Empty;
int count = 1;
char[] charArr = inputString.ToCharArray();
for (int i = 0; i < charArr.Length; i++) {
    for (int j = i + 1; j < charArr.Length; j++) {
        if (charArr[i] == charArr[j])
            count++;
    }
    if (!OutputString.Contains(charArr[i]))
        OutputString += charArr[i].ToString() + count.ToString();

    count = 1;
}
OutputString = string.Concat(OutputString.OrderBy(c => c));
Run Code Online (Sandbox Code Playgroud)

假设输入字符串在 xgdgyd

输出应为:

d2g2x1y1.
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 7

您可以使用Linq简化此操作:

string s = "xgdgyd";

var result = s
   .GroupBy(c => c)
   .Select(g => g.Key.ToString() + g.Count())
   .OrderBy(x => x);

Console.WriteLine(string.Concat(result)); // Outputs "d2g2x1y1"
Run Code Online (Sandbox Code Playgroud)

这里最有用的是GroupBy(),它将所有相同的项目组合在一起。这使我们可以g.Count()用来计算每个组中的项目数。

然后,我们只需将每个组键(一个字符)及其计数连接到一个字符串中。

.Net Fiddle上的示例

(我在这里简化了使用string.Concat()而不是string.Join()的代码。)