Ordinare un ArrayList i cui elementi sono degli object[] array

martedì 28 giugno 2011 - 16.49

pishta Profilo | Newbie

Salve a tutti, come potrei fare il Sort() di un ArrayList composto da array di oggetti? il tutto in C#

Sono in questo scenario

ArrayList soluzione{
arrayOggetto1->[el1][el2][el3]
arrayOggetto2->[el1][el2][el3]
arrayOggetto3->[el1][el2][el3]
arrayOggetto4->[el1][el2][el3]
arrayOggetto5->[el1][el2][el3]
}

vorrei ordinare l'ArrayList in base a el3.

Grazie

gigi82 Profilo | Newbie

>Salve a tutti, come potrei fare il Sort() di un ArrayList composto
>da array di oggetti? il tutto in C#
>
>Sono in questo scenario
>
>ArrayList soluzione{
>arrayOggetto1->[el1][el2][el3]
>arrayOggetto2->[el1][el2][el3]
>arrayOggetto3->[el1][el2][el3]
>arrayOggetto4->[el1][el2][el3]
>arrayOggetto5->[el1][el2][el3]
>}
>
>vorrei ordinare l'ArrayList in base a el3.
>

Ti conviene implementare l'interfaccia IComparer, http://msdn.microsoft.com/en-us/library/0e743hdt.aspx
Ciao,

Luigi

pishta Profilo | Newbie

Grazie, ora ho cambiato un pò la struttura per semplificarmi la vita. Ora ho una List di oggetti.

Mi trovo a dover confrontare per l'ordinamento, una variabile double per ogni oggetto.

Con IComparer potrei avere un esempio? ho letto il link ma non riesco a ricondurlo al mio caso

Grazie

gigi82 Profilo | Newbie

>Grazie, ora ho cambiato un pò la struttura per semplificarmi
>la vita. Ora ho una List di oggetti.
>
>Mi trovo a dover confrontare per l'ordinamento, una variabile
>double per ogni oggetto.
>

Io mi sono creato un oggetto che, spero, rappresenti a grandi linee il tuo:
public class MyObject { private double number; public double Number { get { return number; } } private object someObject; public object SomeObject { get { return someObject; } } public MyObject(object obj, double number) { this.number = number; this.someObject = obj; } public override string ToString() { return this.number.ToString(); } }

>
>Con IComparer potrei avere un esempio? ho letto il link ma non
>riesco a ricondurlo al mio caso
>

Mi sono creato una classe che implementa l'interfaccia IComparer
public class SortMyObject : IComparer<MyObject> { public int Compare(MyObject x, MyObject y) { return x.Number.CompareTo(y.Number); } }

Tengo a precisare che il metodo Compare ritorna
-1 quando X < Y
0 quando X = Y
1 quando X > Y

Qui puoi vedere un metodo che sfrutta l'oggetto SortMyObject
public void StartSort() { List<MyObject> myList = new List<MyObject>(); myList.Add(new MyObject(null, 5)); myList.Add(new MyObject(null, 1)); myList.Add(new MyObject(null, 69)); myList.Add(new MyObject(null, 99)); myList.Add(new MyObject(null, 46)); myList.Add(new MyObject(null, 462)); myList.Add(new MyObject(null, 867)); myList.Add(new MyObject(null, 758)); IComparer<MyObject> comp = new SortMyObject(); myList.Sort(comp); }

Questo pezzo di codice:
"IComparer<MyObject> comp = new SortMyObject();
myList.Sort(comp);"

ti indica di crearti un oggetto SortMyObject e di passare l'istanza come parametro al metodo Sort della lista.

Spero di essere stato più chiaro ora.

Ciao,
Luigi

Gluck74 Profilo | Guru

Bene, con una lista generics, puoi utilizzare una semplice lambdaExpression:

mylist.Sort((sol1, sol2) => {return sol1.valore.CompareTo(sol2.valore);});

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

pishta Profilo | Newbie

Ok il metodo di gigi funziona ! Grazie mille!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5