using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
var index = new Dictionary<string, HashSet<int>>
{
{ "hello", new HashSet<int> { 0, 5, 1 } },
{ "world", new HashSet<int> { 1, 23 } },
{ "onenote", new HashSet<int> { 47, 23, 1 } }
};
var query = "hello world xyz".Split();
var scores = query.Where(term => index.ContainsKey(term))
.SelectMany(term => index[term])
.GroupBy(x => x)
.ToDictionary(group => group.Key, group => group.Count());
foreach (var kvp in scores.OrderByDescending(x => x.Value).Take(3))
{
Console.WriteLine("Document {0} scored {1}", kvp.Key, kvp.Value);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkgICAgdmFyIGluZGV4ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBIYXNoU2V0PGludD4+CgkgICAgewoJICAgICAgICB7ICJoZWxsbyIsIG5ldyBIYXNoU2V0PGludD4geyAwLCA1LCAxIH0gfSwKCSAgICAgICAgeyAid29ybGQiLCBuZXcgSGFzaFNldDxpbnQ+IHsgMSwgMjMgfSB9LAoJICAgICAgICB7ICJvbmVub3RlIiwgbmV3IEhhc2hTZXQ8aW50PiB7IDQ3LCAyMywgMSB9IH0KCSAgICB9OwoJICAgIAoJICAgIHZhciBxdWVyeSA9ICJoZWxsbyB3b3JsZCB4eXoiLlNwbGl0KCk7CgkgICAgdmFyIHNjb3JlcyA9IHF1ZXJ5LldoZXJlKHRlcm0gPT4gaW5kZXguQ29udGFpbnNLZXkodGVybSkpCgkgICAgICAgICAgICAgICAgICAgICAgLlNlbGVjdE1hbnkodGVybSA9PiBpbmRleFt0ZXJtXSkKCSAgICAgICAgICAgICAgICAgICAgICAuR3JvdXBCeSh4ID0+IHgpCgkgICAgICAgICAgICAgICAgICAgICAgLlRvRGljdGlvbmFyeShncm91cCA9PiBncm91cC5LZXksIGdyb3VwID0+IGdyb3VwLkNvdW50KCkpOwoJICAgIAoJICAgIGZvcmVhY2ggKHZhciBrdnAgaW4gc2NvcmVzLk9yZGVyQnlEZXNjZW5kaW5nKHggPT4geC5WYWx1ZSkuVGFrZSgzKSkKCSAgICB7CgkgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJEb2N1bWVudCB7MH0gc2NvcmVkIHsxfSIsIGt2cC5LZXksIGt2cC5WYWx1ZSk7CgkgICAgfQoJfQp9