using System; using System.Collections.Generic; public class Test { class Obj2 : IComparable { public string Name { get; set; } public int Id { get; set; } public Obj2(string name, int id) { Name = name; Id = id; } public override string ToString() { return "(\"" + Name + "\", " + Id + ")"; } public int CompareTo(object obj) { Obj2 other = obj as Obj2; return Id.CompareTo(other.Id); } } class Obj1 : IComparable { public string Name { get; set; } public List Objects { get; set; } public Obj1(string name) { Name = name; Objects = new List(); } public override string ToString() { string retString = "\"" + Name + "\" : { "; foreach (Obj2 objCur in Objects) { retString += objCur.ToString() + " "; } retString += "}"; return retString; } public int CompareTo(object obj) { Obj1 other = obj as Obj1; /* loop until one list ends */ for (int idx = 0; idx < Objects.Count && idx < other.Objects.Count; ++idx) { int comparison = Objects[idx].Id.CompareTo(other.Objects[idx].Id); /* if not equal return */ if (comparison != 0) { return comparison; } } /* if they were equal until now use count to compare */ return Objects.Count - other.Objects.Count; } } class Obj1List { public List Objects { get; set; } public Obj1List() { Objects = new List(); } public override string ToString() { string retString = ""; foreach (Obj1 objCur in Objects) { retString += objCur + "\n"; } return retString; } } class Program { static void Main(string[] args) { /* * Before sorting: * "Test" : { ("A", 2), ("B", 3) } * "Test2" : { (("C", 1), ("D", 2) } * "Test3" : { (("A", 2), ("B", 2), ("C", 3) } */ Obj1List objList = new Obj1List(); Obj1 parObject = new Obj1("Test"); parObject.Objects.Add(new Obj2("A", 2)); parObject.Objects.Add(new Obj2("B", 3)); objList.Objects.Add(parObject); parObject = new Obj1("Test2"); parObject.Objects.Add(new Obj2("C", 1)); parObject.Objects.Add(new Obj2("D", 2)); objList.Objects.Add(parObject); parObject = new Obj1("Test3"); parObject.Objects.Add(new Obj2("A", 2)); parObject.Objects.Add(new Obj2("B", 2)); parObject.Objects.Add(new Obj2("C", 3)); objList.Objects.Add(parObject); Console.WriteLine(objList); /* * Result: * "Test" : { (("C", 1), ("D", 2)} * "Test3" : { (("A", 2), ("B", 2), ("C", 3)} * "Test2" : { ("A", 2), ("B", 3)} */ objList.Objects.Sort(); Console.WriteLine(objList); } } }