使用Linq创建字典的替代实现

时间:2013-12-06 20:52:51

标签: c# linq

我有一个片段如下。基本上我想从我现在的系列中创建一本字典。如果我做了很长的路,没有问题,代码运行良好,我得到了预期的结果。

class Program
{
     static void Main(string[] args)
    {
        List<int> series = new List<int>() { 1,2,3,4 };
        Dictionary<int, List<int>> D = new Dictionary<int,List<int>>();
        foreach (var item in series)
        {
            D.Add(item, seriesWithinSeries(item));
        }

    }
     public static List<int> seriesWithinSeries(int seed)
     {
         return Enumerable.Range(0, seed).Where(x => x < seed).ToList();
     }
}

如何将其转换为Linq?我试过这个:

D = series.Select(x=> { return new (x,seriesWithinSeries(x));}).ToDictionary<int,List<int>>();

但编译器抱怨我需要一个新的类型,这是有道理的。但是,我真的不知道如何解决它。请帮忙。

1 个答案:

答案 0 :(得分:2)

ToDictionary没有无参数版本。你可能想要这个:

var result = series.ToDictionary(x => x, x => seriesWithingSeries(x));

这里不需要匿名类型。但是为了完整的解释,这里有一个anonymous type的正确语法:

var result = series
    .Select(x => new { Key = x, Value = seriesWithinSeries(x) })
    .ToDictionary(pair => pair.Key, pair => pair.Value);