One little known and scarcely document feature of LINQ is its Aggregate method. This function is very useful when you want to do something to the whole collection.
Lets say I have the follwoing BlogEntry class
public class BlogEntry { public Tags { get; set; } }
Now what do I do if I want to build a tag cloud?
I can use a dictionary and loop through like so:
var entries = GetBlogEntries(); Dictionary<string, int> tags = new Dictionary<string, int>(); foreach (BlogEntry entry in entries) { foreach (string tag in entry.Tags) { if (!tags.ContainsKey(tag)) tags.Add(tag, 0); tags[tag]++; } }
But the easier way is to use the built in Aggregate extension method
return entries.Aggregate(new Dictionary<string, int>(), (tags, e) { if (!tags.ContainsKey(tag)) tags.Add(tag, 0); tags[tag]++; return tags; }