fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class Test
  6. {
  7. public static void Main()
  8. {
  9. var list = new List<String>(){
  10. "CM901K_Spare_parts_EN_rev.04-2",
  11. "CM901K_Spare_parts_EN_rev.04-1",
  12. "CM901K_Spare_parts_EN_rev.04-3",
  13. "rev.04-2",
  14. "CM_Manual_EN_rev.01",
  15. "CM_Manual_EN_rev.02",
  16. "CM_Manual_EN_REV.05",
  17. "CM_Manual_EN_REV.06",
  18. "CM_Manual_EN_REV.07",
  19. "CM12-CM6K_Spare_parts_DK_rev.01",
  20. "CM12-CM6K_Spare_parts_DK_rev.03",
  21. "BT_Dansk_Manual_NOM",
  22. "CM_Svensk_Manual",
  23. "CM901-CM30_Manual_RUS",
  24. "D_Polsk_Manual",
  25. "HPB_spansk_old"
  26. };
  27. var withRev = list.Where(s => s.IndexOf("rev.", StringComparison.OrdinalIgnoreCase) > -1);
  28. var withoutRev = list.Except(withRev);
  29. var orderedWithRev = withRev
  30. .Select(r => {
  31. int RevIndex = r.LastIndexOf("rev.", StringComparison.OrdinalIgnoreCase);
  32. String[] tokens = r
  33. .Substring(RevIndex + "rev.".Length)
  34. .Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
  35. return new
  36. {
  37. Item = r,
  38. RevIndex,
  39. RevisionItem = r.Substring(0, RevIndex),
  40. MainRevision = int.Parse(tokens[0]),
  41. SubRevision = tokens.Length > 1 ? int.Parse(tokens[1]) : 0
  42. };
  43. })
  44. .GroupBy(x => x.RevisionItem.ToLower())
  45. .Select(g => g
  46. .OrderByDescending(x => x.MainRevision)
  47. .ThenByDescending( x => x.SubRevision)
  48. .First().Item);
  49.  
  50. // demo
  51. Console.Write(String.Join(Environment.NewLine, withoutRev.ToArray()));
  52. Console.Write(String.Join(Environment.NewLine, orderedWithRev.ToArray()));
  53. }
  54. }
Success #stdin #stdout 0.06s 38400KB
stdin
Standard input is empty
stdout
BT_Dansk_Manual_NOM
CM_Svensk_Manual
CM901-CM30_Manual_RUS
D_Polsk_Manual
HPB_spansk_oldCM901K_Spare_parts_EN_rev.04-3
rev.04-2
CM_Manual_EN_REV.07
CM12-CM6K_Spare_parts_DK_rev.03