fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. public class Test
  7. {
  8. public static void Main()
  9. {
  10. var values = (new[] { 9, 9, 15, 15, 15, 30, 9 }).Select((x, i) => new { x, i });
  11.  
  12. var query = from v in values
  13. let firstNonValue = values.Where(v2 => v2.i >= v.i && v2.x != v.x).FirstOrDefault()
  14. let grouping = firstNonValue == null ? int.MaxValue : firstNonValue.i
  15. group v by grouping into v
  16. select new
  17. {
  18. From = v.Min(y => y.i) + 1,
  19. To = v.Max(y => y.i) + 1,
  20. Value = v.Min(y => y.x)
  21. };
  22. var result = query.ToArray();
  23.  
  24. foreach (var x in result)
  25. {
  26. Console.WriteLine("From: {0}\tTo: {1}\tValue: {2}", x.From, x.To, x.Value);
  27. }
  28. }
  29. }
Success #stdin #stdout 0.06s 34104KB
stdin
Standard input is empty
stdout
From: 1	To: 2	Value: 9
From: 3	To: 5	Value: 15
From: 6	To: 6	Value: 30
From: 7	To: 7	Value: 9