繁体   English   中英

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

[英]how can i create a programmatically sort order in C# on a grouped collection

我有这个代码,它按字符串字段进行集合和分组:

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

我现在想遍历每个组,但我想按指定的顺序进行。 就像是。 .

foreach (var issueType in groupByIssueType)
{
}

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

 OrderBy(r=>r.Name)

或类似的东西。 . . 我需要一种通过键对分组集合进行排序但使用自定义排序算法的方法

例如,假设我有我的 IssueTypes

“市级”
“国家级”
“国家级”

我想按国家、State、城市的顺序遍历“groupbyIssueType”集合

这样做的最好方法是什么?

您需要编写一个使用自定义排序顺序的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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM