2017-02-27 72 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); 
     } 
相關問題