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<Obj2> Objects { get; set; }
public Obj1(string name)
{
Name = name;
Objects = new List<Obj2>();
}
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<Obj1> Objects { get; set; }
public Obj1List()
{
Objects = new List<Obj1>();
}
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);
}
}
}