Как я могу создать программный порядок сортировки в C # в сгруппированной коллекции - PullRequest
0 голосов
/ 05 июня 2011

у меня есть этот код, который принимает коллекцию и группы по строковому полю:

 var groupByIssueType = issues.GroupBy(r => r.IssueType);

Теперь я хочу просмотреть каждую группу, но я хочу сделать это в указанном порядке. что-то вроде . ,

foreach (var issueType in groupByIssueType)
{
}

Проблема в том, что порядок не алфавитный, поэтому я не могу просто сделать

 OrderBy(r=>r.Name)

или что-то в этом роде. , , мне нужен способ сортировки сгруппированной коллекции по ключам, но с использованием собственного алгоритма сортировки

Так, например, допустим, у меня есть IssueTypes

"Уровень города"
«Государственный уровень»
«Уровень страны»

Я хочу просмотреть коллекцию groupbyIssueType в порядке Страна, Штат, Город

Каков наилучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 05 июня 2011

Вам нужно написать IComparer<String>, который использует ваш пользовательский порядок сортировки.

Например:

static string[] order = { ... };
public int Compare(string x, string y) {
    return Array.IndexOf(order, x).CompareTo(Array.IndexOf(order, y));
}
0 голосов
/ 05 июня 2011

Простой способ его кодирования без создания новых классов, перечислений или чего-либо со сложной логикой - создать список или массив строк в нужном вам порядке, например

List<string> items = new List<string>() { "C", "A", "D", "E", "B" };

Затем вы можете использовать это как первую или управляющую последовательность в операции соединения. Порядок пунктов выше будет сохранен, что означает, что ваша последовательность other будет затем отсортирована в соответствии с вашим пользовательским правилом.

var orderedGroupedItems = from item in items
                          join foogroup in groupedFoos
                          on item equals foo.Key
                          select foogroup;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...