我如何用C#在分组集合上以编程方式创建排序顺序

本文关键字:编程 方式 创建 顺序 排序 集合 何用 | 更新日期: 2023-09-27 17:58:29

我有这样的代码,它接受一个集合并按字符串字段分组:

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

我现在想循环遍历每个组,但我想按指定的顺序执行。像。

foreach (var issueType in groupByIssueType)
{
}

问题是订单不是字母的,所以我不能只做

 OrderBy(r=>r.Name)

或者类似的东西。我需要一种按密钥对分组集合进行排序的方法,但要使用自定义排序算法

例如,假设我有作为我的IssueTypes

"城市级别"
"状态级别"
"国家级"

我想按国家、州、城市的顺序循环浏览"groupbyIssueType"集合

最好的方法是什么?

我如何用C#在分组集合上以编程方式创建排序顺序

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

例如:

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

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

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;