【问题标题】:how can i create a programmatically sort order in C# on a grouped collection如何在 C# 中在分组集合上以编程方式创建排序顺序
【发布时间】:2011-09-08 17:40:57
【问题描述】:

我有这样的代码,它通过一个字符串字段来收集和分组:

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

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

foreach (var issueType in groupByIssueType)
{
}

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

 OrderBy(r=>r.Name)

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

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

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

我想按 Country、State、City 的顺序循环遍历“groupbyIssueType”集合

最好的方法是什么?

【问题讨论】:

    标签: c# linq sorting collections


    【解决方案1】:

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

    例如:

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

    【讨论】:

    • 我想这是我关于如何创建使用预定义有序列表的自定义 Icomparer 的问题。 .
    【解决方案2】:

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

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 2022-08-08
      • 2012-12-02
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多