fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class Test
  6. {
  7. class Cls {
  8. public int SequenceNumber { get; set; }
  9. public int Value { get; set; }
  10. public Cls(int a, int b) {SequenceNumber=a;Value=b;}
  11. }
  12. class Run {
  13. public int From {get; set;}
  14. public int To {get; set;}
  15. public int Value {get;set;}
  16. }
  17. public static void Main()
  18. {
  19. var all = new [] {
  20. new Cls(1, 9)
  21. , new Cls(2, 9)
  22. , new Cls(3, 15)
  23. , new Cls(4, 15)
  24. , new Cls(5, 15)
  25. , new Cls(6, 30)
  26. , new Cls(7, 9)
  27. };
  28. var f = all.First();
  29. var res = all.Skip(1).Aggregate(
  30. new List<Run> {new Run {From = f.SequenceNumber, To = f.SequenceNumber, Value = f.Value} }
  31. , (p, v) => {
  32. if (v.Value == p.Last().Value) {
  33. p.Last().To = v.SequenceNumber;
  34. } else {
  35. p.Add(new Run {From = v.SequenceNumber, To = v.SequenceNumber, Value = v.Value});
  36. }
  37. return p;
  38. });
  39. foreach (var r in res) {
  40. Console.WriteLine("{0} - {1} : {2}", r.From, r.To, r.Value);
  41. }
  42. }
  43. }
Success #stdin #stdout 0.04s 34048KB
stdin
Standard input is empty
stdout
1 - 2 : 9
3 - 5 : 15
6 - 6 : 30
7 - 7 : 9