如何在分组集合的C#中以编程方式创建排序顺序

时间:2011-06-05 12:48:08

标签: c# linq sorting collections

我有这个代码,它通过字符串字段获取集合和组:

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

我现在想循环遍历每个组,但我想按指定顺序执行此操作。就像是 。 。

foreach (var issueType in groupByIssueType)
{
}

问题是订单不是字母顺序所以我不能只做

 OrderBy(r=>r.Name)

或类似的东西。 。 。我需要一种方法来按键分类分组,但使用自定义排序算法

例如,假设我有我的问题类型

“城市级”
“州级”
“国家级”

我想按照国家,州,城市

的顺序遍历“groupbyIssueType集合”

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

您需要编写一个使用自定义排序顺序的IComparer<String>

例如:

static string[] order = { ... };
public int Compare(string x, string y) {
    return Array.IndexOf(order, x).CompareTo(Array.IndexOf(order, y));
}

答案 1 :(得分:0)

在不创建新类或枚举或具有复杂逻辑的情况下对其进行编码的简单方法是创建符合所需顺序的字符串列表或数组,例如

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

然后,您可以将其用作连接操作中的第一个或控制序列。将保留上述项目的顺序,这意味着您的其他序列将被排序到您的自定义规则。

var orderedGroupedItems = from item in items
                          join foogroup in groupedFoos
                          on item equals foo.Key
                          select foogroup;