列出多重排序

时间:2011-08-26 19:11:19

标签: c# list sorting

我有一个列表,我想以多种方式排序。

我的清单是用这个:

theMainList.Add(new LoadLine(theChipList[count].Name, theChipList[count].PartNumber, 
                theChipList[count].XPlacement, theChipList[count].YPlacement, 
                theChipList[count].Rotation, theChipList[count].PkgStyle, 
                theChipList[count].PackageType, theChipList[count].PartDescription,
                theChipList[count].Feeder, theChipList[count].Vision,
                theChipList[count].Speed, theChipList[count].Machine,
                theChipList[count].TapeWidth, theChipList[count].PlacingTime));

我首先使用foreach(var line in theMainList)获取每一行。

现在,对于每个line我需要比较某些位置并相应地对它们进行排序。

所以, FIRST 我想要比较的是每个line.Speed并以数字方式组织列表(所以如果速度是1,2,3,4,5,等等,列表中的第一行是line.Speed等于1,然后是2等的行。)

SECOND 我想再次按照line.Speed的顺序对更新后的列表进行排序。我想按照以下顺序对line.PackageStyle进行排序:

"FIDUCIAL", "FID", "FID0", "FID1", "FID2", "FID3", "FID4", "FID5",
"FID6", "FID7", "FID8", "FID9", "RES", "0402", "0201", "0603", 
"0805","1206", "1306", "1608", "3216", "2551", "1913", "1313",
"2513","5125", "2525", "5619", "3813", "1508", "6431", "2512",
"1505","2208", "1005", "1010", "2010", "0505", "0705", "1020",
"1812","2225", "5764", "4532", "1210", "0816", "0363", "SOT"

THIRD 我想先排序新的更新列表,然后先排序Speed,然后排序PackageStyle,排在第二位...... line.PartNumber 。再次,这将在数字上就像line.Speed那样。

有没有办法做这种多重排序技术?

2 个答案:

答案 0 :(得分:6)

使用Linq的OrderBy()ThenBy()方法:

theMainList.OrderBy(l => l.Speed)
           .ThenBy(l => l.PackageStyle)
           .ThenBy(l => l.PartNumber);

答案 1 :(得分:1)

您应该可以使用OrderBy命名空间中提供的ThenBySystem.Linq扩展方法来完成此操作。如,

var sortedList = theMainList
   .OrderBy(l => l.Speed)
   .ThenBy(l => l.PackageStyle)
   .ThenBy(l => l.PartNumber);

请记住,您可能需要使用IComparer覆盖默认比较。有关详细信息,请参阅MSDN