当每个项目都可以有多个键时,是否可以对一个集合进行分组?

卷曲的保罗

我遇到一个问题,即给定的项目可能有多个键,并且在分组时需要同时出现在两个集合中。这可能吗?

这些项目可能看起来像这样

class Item
{
   Category mainCat {get;set;}

   IEnumerable<Category> RelatedCategories {get;set;}

   String RefNumber {get;set;}
}

class Category
{
   String CatName {get;set;}
}

我需要按类别对项目集合进行分组,但是如果项目具有相关类别,则它也需要出现在相关类别的组中。

因此,作为最简单的示例,我将在集合中具有以下item实例:

参考:A1类别:Cat_01相关类别:{Cat_02}

分组后我想要的输出是:

密钥:Cat_01,项目{A1}密钥:Cat_02,项目{A1}

这有可能吗?

朱哈尔

是的,您可以按照以下方式进行操作。

var dictionary = item.RelatedCategories
     .Concat(Enumerable.Repeat(item.mainCat, 1))
     .ToDictionary(c => c.CatName, c => item);

这将获取相关类别并连接主要类别,并ToDictionary用于将每个类别名称与给定项目相关联。

如果您要处理的项目列表会变得更加复杂,因为Dictionary<string, List<Item>>在这种情况下,我认为您需要一个

var dictionary = items.SelectMany(i => i.RelatedCategories
                                        .Concat(Enumerable.Repeat(i.mainCat, 1))
                                        .Select(c => new { c.CatName, Item = i}))
                      .GroupBy(a => a.CatName)
                      .ToDictionary(a => a.Key, a => a.ToList());

在这里,内部查询正在创建匿名类的枚举,这些枚举将每个类别名称与该项目相关联。SelectMany将压平的枚举为一体。然后,GroupBy将根据类别名称将这些匿名类分组。然后ToDictionary将创建一个字典,其中的键是每个组的键(类别名称),而值是与类别名称关联的项目列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有相同数据的多个 JComboBoxes,每个项目都可以选择一次

来自分类Dev

如何使 ListView 中的每个项目都可以点击以调用另一个活动?

来自分类Dev

LINQ魔术可以在一个集合中查找多个项目而无需为每个项目进行研究吗?

来自分类Dev

我可以对 Memcached 键进行分组,以便我可以刷新一个组,但总 Memcached

来自分类Dev

如何在phpquery中进行链接(几乎所有内容都可以是一个链)

来自分类Dev

是否可以为除了一个类型子集之外的所有类型都可以使用的特征创建一个通用的隐式?

来自分类Dev

Selenium和TestNG都可以在一个浏览器中进行测试

来自分类Dev

除了一个元素之外的所有元素都可以使用addEventListener

来自分类Dev

除了一个元素之外的所有元素都可以使用addEventListener

来自分类Dev

任何实例都可以访问(一个类的)所有实例

来自分类Dev

如何在C ++中实现一个场景图,其中每个场景节点都可以引用多个子场景节点

来自分类Dev

Ember js:创建一个全局对象,每个控制器都可以观察到

来自分类Dev

我在json中有一个数组,当我尝试使用以下代码访问它时,出现多个单词错误。任何人都可以帮助修复代码

来自分类Dev

从bash文件中读取key = value对的有效方法,每一行都可以对其进行处理

来自分类Dev

我的属性只有一个get,但是我希望每次调用该值时都可以更改它

来自分类Dev

是否保证“每个”都可以与更改数组一起使用?

来自分类Dev

是否可以有XML,适当的XSD,可以选择maxOccurs =“ 1”,而每个元素都可以使用minOccurs =“ 1”?

来自分类Dev

动态设置索引。这样所有可能的输入都可以被第一个整除

来自分类Dev

创建一个公共频道,所有用户都可以通过YouTube数据API上传视频

来自分类Dev

在我所有的应用程序类中都可以访问一个对象

来自分类Dev

Qt C++ 创建一个所有类都可以访问的全局变量

来自分类Dev

Java中的所有内容是否都可以进行垃圾回收?

来自分类Dev

如何制作一个 RecyclerView 里面有一个 RatngBar,以便用户可以对 RecylerView 项目进行评分

来自分类Dev

在C#中,是否可以保证任何给定线程都可以看到从另一个线程到引用类型变量的值所做的更新?

来自分类Dev

当一个元素都可以包含PCDATA和另一个ELEMENT时,DTD的正确格式是什么?

来自分类Dev

Google Forms每次提交都可以是一个文件吗

来自分类Dev

创建一个任何人都可以直接提交的git存储库

来自分类Dev

任何人都可以用 Jsoup 刮一个元素吗?

来自分类Dev

任何人都可以对以下javascript RE代码进行解释吗?

Related 相关文章

  1. 1

    具有相同数据的多个 JComboBoxes,每个项目都可以选择一次

  2. 2

    如何使 ListView 中的每个项目都可以点击以调用另一个活动?

  3. 3

    LINQ魔术可以在一个集合中查找多个项目而无需为每个项目进行研究吗?

  4. 4

    我可以对 Memcached 键进行分组,以便我可以刷新一个组,但总 Memcached

  5. 5

    如何在phpquery中进行链接(几乎所有内容都可以是一个链)

  6. 6

    是否可以为除了一个类型子集之外的所有类型都可以使用的特征创建一个通用的隐式?

  7. 7

    Selenium和TestNG都可以在一个浏览器中进行测试

  8. 8

    除了一个元素之外的所有元素都可以使用addEventListener

  9. 9

    除了一个元素之外的所有元素都可以使用addEventListener

  10. 10

    任何实例都可以访问(一个类的)所有实例

  11. 11

    如何在C ++中实现一个场景图,其中每个场景节点都可以引用多个子场景节点

  12. 12

    Ember js:创建一个全局对象,每个控制器都可以观察到

  13. 13

    我在json中有一个数组,当我尝试使用以下代码访问它时,出现多个单词错误。任何人都可以帮助修复代码

  14. 14

    从bash文件中读取key = value对的有效方法,每一行都可以对其进行处理

  15. 15

    我的属性只有一个get,但是我希望每次调用该值时都可以更改它

  16. 16

    是否保证“每个”都可以与更改数组一起使用?

  17. 17

    是否可以有XML,适当的XSD,可以选择maxOccurs =“ 1”,而每个元素都可以使用minOccurs =“ 1”?

  18. 18

    动态设置索引。这样所有可能的输入都可以被第一个整除

  19. 19

    创建一个公共频道,所有用户都可以通过YouTube数据API上传视频

  20. 20

    在我所有的应用程序类中都可以访问一个对象

  21. 21

    Qt C++ 创建一个所有类都可以访问的全局变量

  22. 22

    Java中的所有内容是否都可以进行垃圾回收?

  23. 23

    如何制作一个 RecyclerView 里面有一个 RatngBar,以便用户可以对 RecylerView 项目进行评分

  24. 24

    在C#中,是否可以保证任何给定线程都可以看到从另一个线程到引用类型变量的值所做的更新?

  25. 25

    当一个元素都可以包含PCDATA和另一个ELEMENT时,DTD的正确格式是什么?

  26. 26

    Google Forms每次提交都可以是一个文件吗

  27. 27

    创建一个任何人都可以直接提交的git存储库

  28. 28

    任何人都可以用 Jsoup 刮一个元素吗?

  29. 29

    任何人都可以对以下javascript RE代码进行解释吗?

热门标签

归档