Изменение порядка упорядочения коллекции - PullRequest
0 голосов
/ 02 августа 2011

У меня есть коллекция предметов, и у каждого из них есть свойство int TypeId. Мне нужно переупорядочить элементы в этой коллекции (или получить новые), где элементы заказываются, поэтому сначала все элементы с TypeId = 3, затем с TypeId = 1, а затем TypeId = 2.
Мое решение:

var result = new List<A>();
result.AddRange(source.Where(i => i.TypeId == 3));
result.AddRange(source.Where(i => i.TypeId == 1));
result.AddRange(source.Where(i => i.TypeId == 2));

Интересно, есть ли другое быстрое решение без многократной итерации по коллекции source (может быть, какой-то трюк с LINQ)?

1 Ответ

3 голосов
/ 02 августа 2011

Вы можете просто создать массив последовательности заказов и использовать его в операторе OrderBy, просто запросив индекс.Вот псевдо-логика (я не помню, если IndexOf доступен с собственным массивом, но если не просто использовать другой тип коллекции)

  int[] order = new int[] { 3, 1, 2};
  source.OrderBy(i => Array.IndexOf(order, i.TypeId));

- РЕДАКТИРОВАТЬ пример, основанный на комментарии от Люка, чтобыправильно скомпилирует

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