【问题标题】:grouping list by N to new tab[]按 N 分组列表到新标签 []
【发布时间】:2014-04-29 11:54:29
【问题描述】:

您好,我是 linq 和 c# 的新手。

我需要将客户端对象列表按 N 分组并将其替换为选项卡。 例如 列表: 用户 1 用户2 (...) 用户N

我想收到List<Client>[] tabOfClients,里面有更小的列表,比如:

tab[0] - user1 到 userN 的列表

tab[1] - 用户 N+1 到用户 2N 的列表

(...)

N=3

我找到了对每 3 个对象进行分组的方法,但它不是我的目标 有人帮帮我吗?

【问题讨论】:

    标签: c# linq grouping


    【解决方案1】:

    一些条带和分组:

    var groupedUsers = users.Select((e,i) => new{ Index=Math.Floor(i/n),User=e})
                        .GroupBy(g => g.Index);
    

    现场示例:http://rextester.com/GZORR50968

    解释一下:

    users 是您要分组的对象列表 users.Select((e,i) => new{ Index=Math.Floor(i/n),User=e}) 列出具有 2 个属性的匿名对象列表的项目:

    • Index 是项目的索引除以你想要在一个组中的项目数的结果
    • User 是原始对象

    此时您将得到一个列表,例如

    • 索引=0,用户=a
    • 索引=0,用户=b
    • 索引=0,用户=c
    • 索引=1,用户=d
    • 索引=1,用户=e
    • 索引=1,用户=f

    然后你可以只GroupBy 那个Index 来获取列表列表。

    【讨论】:

      【解决方案2】:

      为每个 N 的倍数做一个循环,在循环内为每个 tab[x] 创建一个新列表,并用适当的用户填充列表。

      【讨论】:

        【解决方案3】:

        这是使用Dictionary<int,List<string>>的解决方案

           List<string> list = new List<string>{"1","2","3","4","5","6","7"};
        
           var dict = new Dictionary<int, List<string>>();
        
           for (int i = 0; i < list.Count; i+=3)
               dict[i] = list.Where((s,index) => index >= i && index < i+3).ToList();
        

        【讨论】:

          【解决方案4】:

          我不知道你为什么要通过 linq 来做这件事,但这是可行的:

          static void Main(string[] args)
          {
              var o = Enumerable.Range(0, 100).Select(x => x.ToString());
              int i = 0;
              var groups = o.GroupBy(x => i++ / 3);
              foreach (var g in groups)
              {
                  Console.WriteLine(String.Join(",", g));
              }
          }
          

          我们使用i 来计算某物被击中的次数并进行分组。

          请注意,这可能不适用于所有 LINQ 源,但对于简单的集合,它可以正常工作。

          我建议你只使用 foreach 并使用该方法。

          【讨论】:

          • 这是可行的,但不是这样!
          • 我同意 - .Select() 方式更好(虽然效率稍低 - 并不是说​​我认为 OP 关心,因为他们无论如何都在使用 LINQ)。
          猜你喜欢
          • 1970-01-01
          • 2018-10-03
          • 2013-03-17
          • 1970-01-01
          • 1970-01-01
          • 2018-03-10
          • 1970-01-01
          • 1970-01-01
          • 2017-05-06
          相关资源
          最近更新 更多