【问题标题】:How to sort characters in a string containing spaces by keeping the spaces如何通过保留空格对包含空格的字符串中的字符进行排序
【发布时间】:2017-07-17 23:09:31
【问题描述】:

输入字符串可能如下所示:

“2 4 8 6”或“a b z g h”

输出字符串应如下所示:

“2 4 6 8”和“a b g h z”

我正在尝试使用 C# LINQ 找到答案,任何其他简单的方法都可以。 作为初学者,我在这个链接中解决了这个问题:Is there a simple way that I can sort characters in a string in alphabetical order

但是,我无法按照我希望的顺序正确地对数组进行排序。

编辑:请注意字符之间的空格数为 1。如果可能,请考虑这个测试用例“2 15 3”。

【问题讨论】:

  • 如果输入字符串是"123 abc 8 + 1 xyz 4 9 -5",输出字符串是什么?
  • 是不是一直用空格作为“分隔符”,意思是,你不能把字符串按空格分割然后排序吗?
  • 非空间块之间的空格数是否总是1?
  • 最简单的(提供的两个例子都可以,但一般情况下可能会失败)string result = string.Join(" ", source.Split(' ').OrderBy(x => x));我们拆分初始字符串,对子字符串进行排序,然后将它们组合回字符串
  • @KG aka Confused_Coder:作为一个初学者是完全可以的,但是,请以正确的方式陈述问题:要么描述一般情况(参见我的怪诞例子),要么明确说明你的字符串只能包含以空格分隔的单个字母/数字。您的问题中的“字符串可能看起来”意味着该字符串可能看起来完全不同

标签: c# string linq sorting


【解决方案1】:
    string text = "a b z g h";
    string[] textWithoutSpaces = text.Split(new[]{' '},
                                            StringSplitOptions.RemoveEmptyEntries);
    Array.Sort(textWithoutSpaces);
    string result = String.Join(" ", textWithoutSpaces);

【讨论】:

  • 好答案。我建议text.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries); 以防万一字符之间有多个空格。
【解决方案2】:

在空格处拆分您的文本。然后对结果值进行排序并用空格将它们连接在一起:

var result = string.Join(" ", text.Split(' ').OrderBy(v => v));

【讨论】:

  • 一个不错的 LINQ 单线器,我非常喜欢它。
  • 我建议StringSplitOptions.RemoveEmptyEntries。这样一来,如果字符之间有多个空格,您将不会得到空字符串。
【解决方案3】:

尝试拆分输入字符串并对其进行排序:

IEnumerable<string> sequence = "a b z g h".Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).OrderBy(p => p);

【讨论】:

    【解决方案4】:

    另一种可能性:

    var res = "1 2 3 4 5".Split(' ')
                         .OrderBy(x=>x)
                         .Aggregate((r,x) => r +" "+ x)
    

    【讨论】:

      【解决方案5】:

      使用 LINQ

              var input1 = "2 4 8 6";
              var input2 = "a b z g h";
              var input3 = "2 4 8 6 a b z g h";
      
              var output = input3.Split(' ').OrderBy(x => x).ToList();
              foreach (var sortedChars in output)
              {
                  Console.WriteLine(sortedChars);
              }
      

      使用内置的 Array.Sort:

              var arr = input3.Split(' ');
              Array.Sort(arr);
              foreach (var s in arr)
              {
                  Console.WriteLine(s);
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多