C# 商店和集团<;键>;基于<;价值>;在所有字典记录中,<;价值>;匹配X

C# 商店和集团<;键>;基于<;价值>;在所有字典记录中,<;价值>;匹配X,c#,linq,C#,Linq,我有一本字典,客户信息,它存储客户ID(键)|年龄(值) 获取不同的年龄(值) 根据每个不同的Age(值)将匹配的CustomerID(键)添加到数组/列表/其他类型中 foreach (var CustomerInfo_Dict_DistinctAge in CustomerInfo_Dict.Values.Distinct()) { foreach (var CustomerInfo in CustomerInfo_Dict) { //if (Cu

我有一本
字典
客户信息
,它存储
客户ID(键)|年龄(值)

  • 获取不同的
    年龄(值)

  • 根据每个不同的
    Age(值)
    将匹配的
    CustomerID(键)
    添加到
    数组/列表/其他类型中

     foreach (var CustomerInfo_Dict_DistinctAge in CustomerInfo_Dict.Values.Distinct())
     {
         foreach (var CustomerInfo in CustomerInfo_Dict)
         {
             //if (CustomerInfo <Value>:Age) == (CustomerInfo_Dict_DistinctAge <Value>:Age)
             {
                 //add matched `CustomerID (Key)` to a separate List
             }
         }
     }
    
    foreach(CustomerInfo_Dict_Dict.Values.Distinct()中的var CustomerInfo_Dict_DistinctAge)
    {
    foreach(CustomerInfo_Dict中的var CustomerInfo)
    {
    //if(CustomerInfo:Age)=(CustomerInfo_Dict_DistinctAge:Age)
    {
    //将匹配的'CustomerID(Key)`添加到单独的列表中
    }
    }
    }
    
  • 只需要一个循环(非LINQ)

    您甚至可以跳过字典部分,因为Linq I分组几乎是一样的:

    var ageToIdsGrouping = idToAge
      .GroupBy(kvp => kvp.Value, kvp => kvp.Key);
    
    这会给你一个GroupedEnumerable,如果你列举它,它就像一本字典;作为分组的集合,每个分组都有一个键(即年龄),并且本身是可枚举的整数(即ID)


    如果您以前有过此功能:

    idToAge[123] = 30;
    idToAge[234] = 30;
    idToAge[345] = 30;
    idToAge[456] = 31;
    
    你应该有这个:

    ageToIds[30] = { 123, 234, 345 };
    ageToIds[31] = { 456 };
    
    要获取所有列表,请执行以下操作:

    foreach(var kvp in ageToIds){
    
      int age = kvp.Key;
    
      List<int> ids = kvp.Value;
    
    }
    
    foreach(ageToIds中的var kvp){
    int age=kvp.Key;
    列表ID=kvp.Value;
    }
    
    所以你想交换你的字典?创建一个映射年龄的字典->具有该年龄的ID列表?谢谢!我正在尝试你的非LINQ版本。我看到,如果键中没有匹配项,您已将
    值添加到
    新列表中。运行后,我是否通过
    foreach(idToAge中的var kvp)
    循环每个键来检索所有
    agetoid[kvp.Value]
    创建的列表,从而获取所有创建的列表*抱歉,我的意思是说,我想不出在运行上述操作之后获取所有创建列表的方法。
    idToAge[123] = 30;
    idToAge[234] = 30;
    idToAge[345] = 30;
    idToAge[456] = 31;
    
    ageToIds[30] = { 123, 234, 345 };
    ageToIds[31] = { 456 };
    
    foreach(var kvp in ageToIds){
    
      int age = kvp.Key;
    
      List<int> ids = kvp.Value;
    
    }