user1205746
user1205746

Reputation: 3364

Alternative implementation for creating a dictionary using Linq

I have a snippet as follow. Basically I would like to create a dictionary from the series I currently have. If I did it the long way, there was no problem, the code run fine and I got the expected results.

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();
     }
}

How do I convert that into Linq? I have tried this:

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

But the compiler complaints I need a type for the new, which makes sense. However, I do not really know how to fix it. Please help.

Upvotes: 1

Views: 114

Answers (1)

BartoszKP
BartoszKP

Reputation: 35891

ToDictionary doesn't have a parameterless version. You probably want this:

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

So anonymous type is not needed here. But for the sake of a complete explanation here is a correct syntax with an anonymous type:

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

Upvotes: 2

Related Questions