2011-06-06 29 views
16

Tengo una lista de direcciones IP de la siguiente maneralista de direcciones IP ordenar usando C#

192.168.1.5 
69.52.220.44 
10.152.16.23 
192.168.3.10 
192.168.1.4 
192.168.2.1 

Busco tal manera de ordenar esta lista para que coincida con el siguiente orden

10.152.16.23 
69.52.220.44 
192.168.1.4 
192.168.1.5 
192.168.2.1 

Respuesta

42

Esto podría parecer como un truco, pero hace exactamente lo que necesita:

var unsortedIps = 
    new[] 
    { 
     "192.168.1.4", 
     "192.168.1.5", 
     "192.168.2.1", 
     "10.152.16.23", 
     "69.52.220.44" 
    }; 

var sortedIps = unsortedIps 
    .Select(Version.Parse) 
    .OrderBy(arg => arg) 
    .Select(arg => arg.ToString()) 
    .ToList(); 
+2

¡Es un método astuto! – ColinE

+0

Ese me hizo jadear. – Tormod

+0

Esto le dará "10.152.16.23", "192.168.1.4", "192.168.1.5", "192.168.2.1", "69.52.220.44" – Norbert

10

puede convertir cada dirección IP en un entero como tal ...

69.52.220.44 => 

69 * 255 * 255 * 255 + 
52 * 255 * 255 + 
220 * 255 + 
44 

Luego ordene por la representación entera.

1

Puede encontrar esta función útil también.

Cuestiones relacionadas