Odpowiem Ci dość połowicznie i w inny sposób niż może tego oczekujesz. Aktualnie nie mam dostepu do kompilatora, ale to co napisze powinno działać ;) Ostatnio się z tym męczyłem :)
Przede wszystkim ,widzę, że masz strukturę (s - string, s, s,s , i-int), czemu więc nie zrobić by jakieś klasy do tego ? Na szybko :
class MojaStruktura
{
public string a,b,c,d = null;
public int liczba = 0;
//konstruktor sam sobie napisz :P
}
Mając klasę możemy stworzyć sobię listę :
List <MojaStruktura> Lista = new List<MojaStruktura>();
Dodajemy sortowanie wg liczb. Aby to zrobić skorzystamy z interface IComparable (z system.collection) który "daje" funkcję int CompareTo(object o);
rozbudowujemy naszą poprzednią klase :
class MojaStruktura:IComparable
{
public string a,b,c,d = null;
public int liczba = 0;
//-----dopisane -----
int IComparable.CompareTo(object o)
{
MojaStruktura tymczasowy = (MojaStruktura)o;
if(this.liczba > tymczasowy.liczba)
{
return 1;
// tak naprawde jeśli liczba z obiektu jest większa od liczby z obiektu do którego porównujemy, możemy zwrócić DOWOLNA liczbę dodatnia, nie ma znaczenia czy 1 czy 1000, tak samo z liczbą ujemną (-1), patrz niżej
}
else if(this.liczba < tymczasowy.liczba)
{
return -1;
}
else return 0;
}
//-----koniec dopisania-----
//konstruktor sam sobie napisz :P
}
teraz już możemy zrobić taki manewr Lista.Sort();
dopisujemy sortowanie wg wartości drugiej czyli B
Aby określić wiele kryteriów sortowania musimy stworzyć sobię klasę dodatkową korzystającą z interface IComparer, który przyjmuje 2 obiekty.
class SortujWgNazwy : IComparer
{
int IComparer.Compare(object o1, object o2)
{
MojaStruktura ms1 = (MojaStruktura)o1;
MojaStruktura ms2 = (MojaStruktura)o2;
return String.Compare(ms1.b, ms2.b);
}
}
teraz aby posortować listę wg nazwy użyjemy :
Lista.Sort(SortujWgNazwy);