【问题标题】:How to split elements of the group in many lists?如何在多个列表中拆分组的元素?
【发布时间】:2015-05-14 08:29:06
【问题描述】:

我有一个包含 MyType 类型元素的列表 (OriginalList)。我的类型是:

MyType
{
    long IDReferenceElement;
    long IDElement;
    string value;
}

所以我想在列表中分离每组元素,其中每组都有具有相同 IDReferenceElement 的元素。

例如一个列表列表,主列表的每个列表只有同组的元素。

List<List<MyType>>

一个例子,我有一个包含这些元素的原始列表:

  • 项目 1(1,1,1);
  • 项目2(1,2,2);
  • 项目 3(1,3,3);
  • 项目 4(2,4,4);
  • 项目5(2,5,5);
  • 项目6(2,6,6);
  • 项目7(3,7,7);
  • 项目8(3,8,8);
  • 项目9(3,9,9);

我想要三个列表:

List1 的项目: - 项目 1(1,1,1); - 项目 2(1,2,2); - 项目 3(1,3,3);

列表2: - 项目 4(2,4,4); - 项目 5(2,5,5); - 项目 6(2,6,6);

列表3: - 项目 7(3,7,7); - 项目 8(3,8,8); - 项目 9(3,9,9);

为了得到它,我正在尝试这样的事情:

List<List>> myResultList = myOriginalList.GroupBy(x=>x.IDReferenceElement).ToList();

它不起作用,因为组元素不是列表。我想知道如何访问分组的每个组并转换为列表。

非常感谢。

【问题讨论】:

标签: c# linq


【解决方案1】:
List<List<MyType>> myResultList = 
      myOriginalList.GroupBy(x=>x.IDReferenceElement)
                    .Select(gr=>gr.ToList()) // convert each group into List
                    .ToList();

【讨论】:

    【解决方案2】:

    另一种方法是使用查找

    var myResultsLookup = myOriginalList.ToLookup(myType => myType.IDReferenceElement);
    

    现在可以使用 IDReferenceElement 值作为键来访问每个数据子集

    var results = myResultsLookup[1];
    

    使用您的测试数据结果将包含元素 (1,1,"1")、(1,2,"2") 和 (1,3,"3")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多