对集合进行分组并返回字典

本文关键字:返回 字典 集合 | 更新日期: 2023-09-27 18:23:52

我写了一个方法,它接受一个项目集合(价格项目-每个项目都有一个金额和一个代码),并按代码对它们进行分组,然后返回一个IDictionary,其中键是项目的代码,值是具有该代码的项目组(希望这有意义!)

以下是方法的实现:

public IDictionary<string, IEnumerable<PriceDetail>> GetGroupedPriceDetails(IEnumerable<PriceDetail> priceDetails)
{
    // create a dictionary to return
    var groupedPriceDetails = new Dictionary<string, IEnumerable<PriceDetail>>();
    // group the price details by code
    var grouping = priceDetails.GroupBy(priceDetail => priceDetail.Code);
    // foreach grouping, add the code as key and collection as value to the dictionary
    foreach (var group in grouping)
    {
        groupedPriceDetails.Add(group.Key, group);
    }
    // return the collection
    return groupedPriceDetails;
}

然后,我尝试重构它以使用ToDictionary,如下所示:

// group the price details by code and return
return priceDetails.GroupBy(priceDetail => priceDetail.Code)
                   .ToDictionary(group => group.Key, group => group);

当我试图编译时,我遇到了一个错误,说我无法从string, IGrouping<string, PriceDetail>的字典转换为string, IEnumerable<PriceDetail>的字典。

有人能告诉我如何正确地重构我第一次尝试这个方法吗?我觉得有一种更简洁的写法,但我想不通!

对集合进行分组并返回字典

你能不做吗:

priceDetails.GroupBy(priceDetail => priceDetail.Code)
               .ToDictionary(group => group.Key, group => group.ToList())

怎么样:

public ILookup<string, PriceDetail> GetGroupedPriceDetails(IEnumerable<PriceDetail> priceDetails)
{
     return priceDetails.ToLookup(priceDetail => priceDetail.Code);
}