fork download
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. public class Test
  5. {
  6. class Obj2 : IComparable
  7. {
  8. public string Name { get; set; }
  9. public int Id { get; set; }
  10.  
  11. public Obj2(string name, int id)
  12. {
  13. Name = name;
  14. Id = id;
  15. }
  16.  
  17. public override string ToString()
  18. {
  19. return "(\"" + Name + "\", " + Id + ")";
  20. }
  21.  
  22. public int CompareTo(object obj)
  23. {
  24. Obj2 other = obj as Obj2;
  25. return Id.CompareTo(other.Id);
  26. }
  27. }
  28.  
  29. class Obj1 : IComparable
  30. {
  31. public string Name { get; set; }
  32. public List<Obj2> Objects { get; set; }
  33.  
  34. public Obj1(string name)
  35. {
  36. Name = name;
  37. Objects = new List<Obj2>();
  38. }
  39.  
  40. public override string ToString()
  41. {
  42. string retString = "\"" + Name + "\" : { ";
  43. foreach (Obj2 objCur in Objects)
  44. {
  45. retString += objCur.ToString() + " ";
  46. }
  47. retString += "}";
  48.  
  49. return retString;
  50. }
  51.  
  52. public int CompareTo(object obj)
  53. {
  54. Obj1 other = obj as Obj1;
  55. /* loop until one list ends */
  56. for (int idx = 0; idx < Objects.Count && idx < other.Objects.Count; ++idx)
  57. {
  58. int comparison = Objects[idx].Id.CompareTo(other.Objects[idx].Id);
  59. /* if not equal return */
  60. if (comparison != 0)
  61. {
  62. return comparison;
  63. }
  64. }
  65. /* if they were equal until now use count to compare */
  66. return Objects.Count - other.Objects.Count;
  67. }
  68. }
  69.  
  70. class Obj1List
  71. {
  72. public List<Obj1> Objects { get; set; }
  73.  
  74. public Obj1List()
  75. {
  76. Objects = new List<Obj1>();
  77. }
  78.  
  79. public override string ToString()
  80. {
  81. string retString = "";
  82. foreach (Obj1 objCur in Objects)
  83. {
  84. retString += objCur + "\n";
  85. }
  86.  
  87. return retString;
  88. }
  89. }
  90. class Program
  91. {
  92. static void Main(string[] args)
  93. {
  94. /*
  95.   * Before sorting:
  96.   * "Test" : { ("A", 2), ("B", 3) }
  97.   * "Test2" : { (("C", 1), ("D", 2) }
  98.   * "Test3" : { (("A", 2), ("B", 2), ("C", 3) }
  99.   */
  100. Obj1List objList = new Obj1List();
  101.  
  102. Obj1 parObject = new Obj1("Test");
  103. parObject.Objects.Add(new Obj2("A", 2));
  104. parObject.Objects.Add(new Obj2("B", 3));
  105. objList.Objects.Add(parObject);
  106.  
  107. parObject = new Obj1("Test2");
  108. parObject.Objects.Add(new Obj2("C", 1));
  109. parObject.Objects.Add(new Obj2("D", 2));
  110. objList.Objects.Add(parObject);
  111.  
  112. parObject = new Obj1("Test3");
  113. parObject.Objects.Add(new Obj2("A", 2));
  114. parObject.Objects.Add(new Obj2("B", 2));
  115. parObject.Objects.Add(new Obj2("C", 3));
  116. objList.Objects.Add(parObject);
  117.  
  118. Console.WriteLine(objList);
  119.  
  120. /*
  121.   * Result:
  122.   * "Test" : { (("C", 1), ("D", 2)}
  123.   * "Test3" : { (("A", 2), ("B", 2), ("C", 3)}
  124.   * "Test2" : { ("A", 2), ("B", 3)}
  125.   */
  126. objList.Objects.Sort();
  127.  
  128. Console.WriteLine(objList);
  129. }
  130. }
  131. }
Success #stdin #stdout 0.01s 131776KB
stdin
Standard input is empty
stdout
"Test" : { ("A", 2) ("B", 3) }
"Test2" : { ("C", 1) ("D", 2) }
"Test3" : { ("A", 2) ("B", 2) ("C", 3) }

"Test2" : { ("C", 1) ("D", 2) }
"Test3" : { ("A", 2) ("B", 2) ("C", 3) }
"Test" : { ("A", 2) ("B", 3) }