На собеседовании попросили написать Linq запрос, выбирающий самую длинную непрерывную последовательность.
У меня получилось так:
using System;
using System.Linq;
static class Program
{
static void Main(string[] args)
{
Object[] s = { "w", "a", "a", "b", "b", "b", "f", "a", "w", "w", "a", "b" };
var result = s.Select((k, i) => new { k, i }).GroupBy(p => p.k, p => p.i).SelectMany(g => g.Select((i, j) => new { k = g.Key, c = i - j }))
.GroupBy(p => new { p.k, p.c }, p => p.k, (k, e) => new { k = k.k, c = e.Count() }).Aggregate((p1, p2) => p1.c > p2.c ? p1 : p2);
Console.WriteLine(String.Format("{0} встречается - {1} раз", result.k, result.c));
}
}
Может кто знает способ попроще.