2017-01-24 32 views
-2

另一個應用程序向我發送不可分割值。所以我這樣做:C#中用於排序的兩個單獨值

string[] myarray = newString[size]; 
for (uint32 i = 0; i<sizOfIncoming;i++){ 
    myarray[i]=incoming[i].location.ToString(); 
    Console.WriteLine(incoming[i].id.ToSTring();) 
} 
array.Sort(myarray); 
for (uint32 x = 0; x<sizeOfIncoming;x++){ 
    Console.WriteLine(myarray[x]); 
} 

但現在我只需要沒有「位置」,還要「ID」

傳入的是這樣的:

5,A 
1,X 
3,N 
2,Z 
4,E 

,並在最後,我需要它是這樣的:

1,X 
2,Z 
3,N 
4,E 
5,A 

我怎樣才能做到這一點?

PS C#新手

+1

傳入的類型是什麼?名單? –

+0

我用傳入的別名,該'FTDI.FT_DEVICE_INFO_NODE [] ftdiDeviceList =新FTDI.FT_DEVICE_INFO_NODE [ftdiDeviceCount];' ftdiDeviceList被進入在我的情況下更換 –

回答

2

使用LINQ,你可以決定你要訂購,你的目標的一部分通過:

如果您的來電陣列具有「ID」和「位置」字段,這裏是你如何排序該ID:

var sortedArray = incoming.OrderBy(x => x.id).ToArray(); 

或者,如果你想按位置訂購:

var sortedArray = incoming.OrderBy(x => x.location).ToArray(); 

然後打印的內容:

for (int i = 0; i<sortedArray.Length;i++) 
{ 
    Console.WriteLine($"{sortedArray[i].id} {sortedArray[i].location}"); 
} 
0
var sortedData = myarray 
    .Select(v => v.Split(',')) 
    .Select(v => new { Id = Convert.ToInt32(v[0]), Location = v[1] }) 
    .OrderBy(v => v.Id) 
    .ThenBy(v => v.Location); 

您可能需要添加using System.Linq;到您的文件首先要得到這個工作。此代碼的工作原理是使用Select將原始集合投影到字符串數組的集合中。然後,對於我們創建的每個字符串數組,我們使用「Id」和「Location」屬性創建一個新的anonymous type,以便於使用。最後,我們可以先通過「Id」屬性然後通過「Location」屬性對集合進行排序。