2016-08-22 138 views
0

這樣的子串排序字符串數組,讓我們說我有一個字符串通過每個元素C#

string[] stringArray = new string[5] { "3 Three", "8 Eight", "6 Six", "13 Thirteen", "24 Twenty Four"; 

我想每個字符串元素中選擇第一個數字和排序這個數組按升序排列的數組「 我想要的結果被使用時:

Console.Writeline(String.Format("{0}, {1} and {2} are the lowest elements", stringArray[0], stringArray[1], stringArray[2])) 

顯示: '3三,六6和8八是最低的元素的

回答

0

這樣的事情應該做的伎倆

string[] stringArray = new string[5] { "3 Three", "8 Eight", "6 Six", "13 Thirteen", "24 Twenty Four" }; 
    var ordered = stringArray.Select(s => new { number = int.Parse(s.Split(' ')[0]), text = s.Split(' ')[1] }).OrderBy(i => i.number).Select(arg => arg.number + " " + arg.text).ToArray(); 
    Console.WriteLine($"{ordered[0]}, {ordered[1]} and {ordered[2]} are the lowest elements"); 

或者在簡單的場景:

var ordered = stringArray.OrderBy(s => int.Parse(s.Split(' ')[0])).ToArray(); 
Console.WriteLine($"{ordered[0]}, {ordered[1]} and {ordered[2]} are the lowest elements"); 
3

您可以使用String.Splitint.Parse與LINQ:

stringArray = stringArray.OrderBy(s => int.Parse(s.Split()[0])).ToArray(); 

另一個更有效,但不易閱讀方式是Array.Sort

Array.Sort(stringArray, (s1, s2) => int.Parse(s1.Split()[0]).CompareTo(int.Parse(s2.Split()[0]))); 
0
string[] stringArray = new string[5] { "3 Three", "8 Eight", "6 Six", "13 Thirteen", "24 Twenty Four"}; 
string[] orderedArray = stringArray.OrderBy(ele => Convert.ToInt32(ele.Split(' ')[0])).ToArray(); 

Console.Writeline(String.Format("{0}, {1} and {2} are the lowest elements", orderedArray[0], orderedArray[1], orderedArray[2])) 

使用上面的代碼。

0

而是分裂或解析字符串,它是更有效,只是弄得有點第一空間的指數,然後由字符串:

string[] stringArray = { "3 Three", "8 Eight", "6 Six", "13 Thirteen", "24 Twenty Four" }; 

var ordered = stringArray.OrderBy(s => s.IndexOf(' ')).ThenBy(s => s).ToArray(); 

Debug.Print(string.Join(", ", ordered)); // "3 Three, 6 Six, 8 Eight, 13 Thirteen, 24 Twenty Four"