Ordinamento array misto stringa/numeri

venerdì 23 luglio 2010 - 17.00
Tag Elenco Tags  VB.NET  |  Visual Studio 2010

nuanda41 Profilo | Newbie

Salve,
ho un problema che non riesco a risolvere.
Ho un array monodimensionale di tipo stringa ( Dim ArrayDaOrdinare as String() ) nel quale memorizzo sia indirizzi IP puri (ad es. "192.168.200.1") sia nomi host (ad es. "internet1") contemporaneamente.
Quando vado ad ordinare questo array ( Array.Sort(arrayDaOrdinare) ) ovviamente mi viene ordinato con ordinamento alfanumerico.
Questo per me è un problema in quanto se ad esempio l'array contiene questi elementi: "192.168.200.1", "192.168.200.20" e "192.168.200.2", l'ordinamento che ottengo è:
192.168.200.1 - 192.168.200.20 - 192.168.200.2
quando in realtà io vorrei:
192.168.200.1 - 192.168.200.20 - 192.168.200.2.
La stessa cosa in caso di array con nomi host (ad es. "internet1", "internet2", "internet3", "internet10") ottengo:
internet1 - internet10 - internet2 - internet3
quando in realtà io vorrei:
internet1 - internet2 - internet3 - internet10

Come posso risolvere questo problema?

Grazie in anticipo.

Alberto.

AntCiar Profilo | Expert

Ciao.

Il metodo "Sort" utilizza l'ordinamento predefinito del tipo di dati su cui stai facendo il sort. Nel tuo caso essendo stringhe effettua un ordinamento di tipo alfanumerico.

Se vuoi che faccia il sort secondo delle tue specifiche regole, gli devi dire tu come fare il confronto.
Dai una occhiata a questa bozza di classe:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

La funzione 'IComparer_Compare' effettua la comparazione. Viene restituito un intero che può avere 3 valori: -1, 0, 1 Alla funzione vengono passati due oggetti (il corrente e il successivo dell'insieme). Se Corrente < Successivo, restituisce -1; se Corrente = Successivo restituisce 0; se Corrente > Successivo restituisce 1.

Poi ovviamente sei tu a rifefinire il 'Corrente' e il 'Successivo'.......


Per usarla basta che fai così:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Cristian Barca

nuanda41 Profilo | Newbie

Perfetto.
La soluzione va aldilà delle mie conoscenze di VB.NET.
Me la studierò con calma...nel frattempo l'ho integrata nel mio programma e il problema è risolto.
Grazie mille.

Alberto.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5