2017-02-27 73 views
2

输入字符串可能看起来像这样:如何通过保持空间含有空格的字符串中的字符进行排序

“2 4 8 6” 或 “abzgh”

输出String应该像此:

“2 4 6 8” 和 “abghz”

我试图找到一个使用C#LINQ和任何其他简单的方法将没事的答案。 作为初学者,我在这个链接中经历了这个问题:Is there a simple way that I can sort characters in a string in alphabetical order

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

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

+2

如果输入的字符串是“”123 abc 8 + 1 xy z 4 9 -5“'输出字符串是什么? –

+1

空格是否总是用作“分隔符”,意思是说,你不能只用空格分割字符串然后对它进行排序吗? – r41n

+0

非空间块之间的空格数是否始终为1? –

回答

7
string text = "a b z g h"; 
    string[] textWithoutSpaces = text.Split(new[]{' '}, 
              StringSplitOptions.RemoveEmptyEntries); 
    Array.Sort(textWithoutSpaces); 
    string result = String.Join(" ", textWithoutSpaces); 
+0

好的答案。我会建议'文字。Split(new [] {'',StringSplitOptions.RemoveEmptyEntries);'以防字符之间有多个空格。 –

+0

@Jim:Thx。我编辑了答案。 –

0

尝试拆分输入字符串和排序是:

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

在空间分割文本。再下订单所产生的价值,并用空格将它们连接在一起:

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

一个很好的LINQ单线程,只是我喜欢它。 – r41n

+0

我建议'StringSplitOptions.RemoveEmptyEntries'。这样,如果字符之间存在多个空格,则不会获得空字符串。 –

0

另一种可能性:

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

使用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); 
     } 
相关问题