【问题标题】:Is there a simple way that I can sort characters in a string in alphabetical order有没有一种简单的方法可以按字母顺序对字符串中的字符进行排序
【发布时间】:2011-09-20 11:01:21
【问题描述】:

我有这样的字符串:

var a = "ABCFE";

有没有一种简单的方法可以将此字符串排序为:

ABCEF

谢谢

【问题讨论】:

    标签: c# string sorting


    【解决方案1】:

    您可以使用 LINQ:

    String.Concat(str.OrderBy(c => c))
    

    如果要删除重复项,请添加.Distinct()

    【讨论】:

    • 这明显比Array.Sort慢。请参阅 Roy 的回答。
    【解决方案2】:

    是的;将字符串复制到 char 数组,对 char 数组进行排序,然后将其复制回字符串。

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

    【讨论】:

    • 根据我的微基准测试,这种方法的运行速度比使用 OrderBy 快大约 3 倍。
    • +1 因为负面标记,我不明白为什么。我跑了一个基准,这远远优于 LINQ。与 Array.Sort 00:00:00.0000022 相比,使用 OrderBy 对“patrick”进行排序需要 00:00:00.0000666
    • 显然方法名是ToCharArray(),而不是ToArray()。
    • 对于字符串,您可以使用 ToCharArray()ToArray() 获得相同的结果,但前者可能会提供更好的性能。见stackoverflow.com/questions/37139053/…
    【解决方案3】:
    new string (str.OrderBy(c => c).ToArray())
    

    【讨论】:

    • 使用新字符串会比 string.concat 快得多。所以如果我们考虑性能,新的字符串会胜出。
    • 也可以用有序枚举来数组转换?
    【解决方案4】:

    你可以用这个

    string x = "ABCGH"
    
    char[] charX = x.ToCharArray();
    
    Array.Sort(charX);
    

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

    【讨论】:

      【解决方案5】:

      这是另一个。你可以使用SortedSet:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 2017-10-04
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        相关资源
        最近更新 更多