将具有匹配特性的对象分组到列表中



我在C#中有一个对象列表。所有对象都包含属性code1和code2(以及其他属性)。

示例:

List -> object = id, name, code1, code2, hours, amount.

有31个可能的code1值。有10个可能的code2值。

我需要将所有具有相同code1和code2值(唯一组合)的对象分组到它们自己的列表中,这些列表将保存在父列表中(以便以后可以迭代每个单独的列表)

听起来你想要这样的东西:

var groups = list.GroupBy(x => new { x.code1, x.code2 });
// Example of iterating...
foreach (var group in groups)
{
    Console.WriteLine("{0} / {1}:", group.Key.code1, group.Key.code2);
    foreach (var item in group)
    {
        Console.WriteLine("  {0} ({1})", item.id, item.name);
    }
}

可枚举扩展是你的朋友(你是朋友吗?:)

var groups = lists.GroupBy(item => new { item.code1, item.code2 });

而且。。。。传奇的斯基特在我之前击中了门柱,羞耻!

时间到了,斯基特(哈,对)。你也可以在字典里把你的常用条目分组。

var mapping = list
  .GroupBy(item => new { item.code1, item.code2 })
  .ToDictionary(g => g.Key, g => g.ToList());

现在映射是一个Dictionary<anon{code1, code2}, List<YourObject>>。当然,您可以去掉值的ToList,字典的值类型将是IGrouping,这是一个IEnumerable。

您也可以使用ToLookup

var lookup = list.ToLookup(item => new { item.code1, item.code2 });

结果是一个ILookup,它具有给定的键类型的键,并且是所使用的列表类型的IEnumerable。这不是一本字典,但可以用类似的方法。

相关内容

  • 没有找到相关文章

最新更新