Список мульти-сортировка - PullRequest
2 голосов
/ 26 августа 2011

У меня есть список, который я хотел бы отсортировать несколькими способами.

Мой список составлен следующим образом:

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 ]

6 голосов
/ 26 августа 2011

Используйте методы Линка OrderBy() и ThenBy():

theMainList.OrderBy(l => l.Speed)
           .ThenBy(l => l.PackageStyle)
           .ThenBy(l => l.PartNumber);
1 голос
/ 26 августа 2011

Этого можно добиться, используя методы расширения OrderBy и ThenBy, доступные в пространстве имен System.Linq.Например,

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

Имейте в виду, что вам может потребоваться переопределить сравнения по умолчанию с помощью IComparer.См. MSDN для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...