【问题标题】:Group similar items in list in the same sequence in C# asp.net在 C# asp.net 中按相同顺序对列表中的相似项进行分组
【发布时间】:2019-04-29 08:04:38
【问题描述】:

我有一个包含重复项目的列表。我必须以相同的顺序一起显示相似的项目。我尝试了排序,但它通过按 asc / des 顺序对其进行排序来更改顺序。

例如:-

我有一个如下列表

tbl1_aaa
tbl1_bbb
chk2_ccc
drp3_ddd
tbl1_eee
txt4_fff
chk2_ggg

考虑到'_' 之前的字符串,我需要将其分组,如下所示

tbl1_aaa
tbl1_bbb
tbl1_eee
chk2_ccc
chk2_ggg
drp3_ddd
txt4_fff

这个可以实现吗

【问题讨论】:

    标签: c# asp.net list group-by


    【解决方案1】:

    您可以在GroupBy 的帮助下尝试分组,然后使用SelectMany展平组:

    var result = list
      .GroupBy(item => item.Substring(0, item.IndexOf('_') + 1))
      .SelectMany(group => group)
      .ToList();
    
    // Let's have a look:
    Console.Write(string.Join(Environment.NewLine, result));
    

    结果:

    tbl1_aaa
    tbl1_bbb
    tbl1_eee
    chk2_ccc
    chk2_ggg
    drp3_ddd
    txt4_fff
    

    https://dotnetfiddle.net/ioNWWv

    【讨论】:

    • 我已经编辑了我的问题。没有 2 个项目是相似的。只有一部分匹配。我们可以只考虑项目的第一部分对它进行相应的分组吗?
    • 它显示相同的结果。与我的原始列表相比没有变化
    • @Aswini:请检查您是否修改了GroupBy(或者复制+粘贴我的代码然后查看)
    • 我仍然得到和原来一样的 lst。我在列表中的确切项目是这种格式“(tbl1_aaa)技术”
    • @Aswini:您能否提供测试原样?然后这个精确测试的期望结果?
    【解决方案2】:

    您可以像这样使用带有 SQL 格式的 LINQ:

      List<string> str = 
        new List<string> { "tbl1", "tbl1", "chk2", "drp3", "tbl1", "txt4", "chk2" };
        str = (from s in str 
               group s by s into ag 
               from g in ag orderby g descending select g).ToList();
    
    Update
    
        List<string> str = 
    new List<string> { "tbl1_aaa", "tbl1_bbb", "chk2_ccc", "drp3_ddd", "tbl1_eee", "txt4_fff", "chk2_ggg" };
                    str = (from s in str
                           group s by s.Substring(0, s.IndexOf('_') + 1) into ag
                        from g in ag orderby g descending
                        select g).ToList();
    

    【讨论】:

    • 这是改变物品顺序的顺序
    • 我只能使用排序。但我不想按任何顺序对项目进行排序。我只想按相同的顺序将相似的分组。
    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 2015-02-23
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2013-08-07
    • 2020-05-26
    • 2016-01-13
    相关资源
    最近更新 更多