Imbattersi in un sort su elementi complessi non è sempre una cosa semplice, anzi il più delle volte siamo noi a dover implementare una logica di Sort.
Gia ma come fare ???
Eccovi un esempio completo e funzionante di come creare un sort
Create una console Application in C# e copiate interamente il codice.
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
namespace ListT_Sort
{
class Program
{
static void Main(string[] args)
{
UseHost uh = new UseHost();
uh.CreateHostList();
uh.SortBeforePrint();
Console.ReadLine();
}
}
public class Host
{
private string _HostName;
private IPAddress _HostIP;
public string HostName
{
get{return _HostName;}
set{_HostName = value;}
}
public IPAddress HostIP
{
get{return _HostIP;}
set{_HostIP = value;}
}
public Host( string Name, IPAddress IP)
{
_HostName = Name;
_HostIP = IP;
}
}
public class UseHost
{
private List
public void CreateHostList()
{
Hosts.Add(new Host("OfficePC", IPAddress.Parse("175.10.33.1")));
Hosts.Add(new Host("Localhost",IPAddress.Parse("127.0.0.1")));
Hosts.Add(new Host("HomePC",IPAddress.Parse("192.168.3.1")));
Hosts.Add(new Host("PortablePC",IPAddress.Parse("194.30.5.28")));
Hosts.Add(new Host("AbtServer", IPAddress.Parse("196.221.5.28")));
}
public void SortBeforePrint()
{
Hosts.Sort(CompareHosts);
for (int i =0; i< Hosts.Count; i++)
{
Console.WriteLine (Hosts[i].HostName);
}
}
public int CompareHosts(Host hp1, Host hp2)
{
if ((hp1 == null) && (hp2 == null))
{
return 0;
}
if ((hp1 == null) && (hp2 != null))
{
return -1;
}
if ((hp1 != null) && (hp2 == null))
{
return 1;
}
if (hp1.HostName == hp2.HostName)
{
return 0;
}
return String.CompareOrdinal(hp1.HostName, hp2.HostName);
}
}
}
Spiegazione pezzo per pezzo..
Questo è il tipo che noi abbiamo implementato o che abbiamo bisogno di implementare.
Si tratta di un tipo semplice tuttavia non implementa altre interfaccie ma solo due
campi.
Tuttavia già questa struttura è una buona base su cui studiare il sort.
public class Host
{
private string _HostName;
private IPAddress _HostIP;
public string HostName
{
get{return _HostName;}
set{_HostName = value;}
}
public IPAddress HostIP
{
get{return _HostIP;}
set{_HostIP = value;}
}
public Host( string Name, IPAddress IP)
{
_HostName = Name;
_HostIP = IP;
}
}
Ho implementato il costruttore solo per fare più in fretta...
Lista degli Host che dobbiamo Ordinare... messa giù un po a caso...
Hosts.Add(new Host("OfficePC", IPAddress.Parse("175.10.33.1")));
Hosts.Add(new Host("Localhost",IPAddress.Parse("127.0.0.1")));
Hosts.Add(new Host("HomePC",IPAddress.Parse("192.168.3.1")));
Hosts.Add(new Host("PortablePC",IPAddress.Parse("194.30.5.28")));
Hosts.Add(new Host("AbtServer", IPAddress.Parse("196.221.5.28")));
Chiamata al metodo di Sort ...
Hosts.Sort(CompareHosts);
Comparazione fra elementi...
if ((hp1 == null) && (hp2 == null))
{
return 0;
}
Gli elementi sono uguali ( e nulli )
if ((hp1 == null) && (hp2 != null))
{
return -1;
}
il secondo elemento è per forza maggiore il primo è null!!
if ((hp1 != null) && (hp2 == null))
{
return 1;
}
Il primo elemento è il maggiore ( vedi sopra)
if (hp1.HostName == hp2.HostName)
{
return 0;
}
Bene dato che il mio elemento di comparazione sono
i campi nome .. li confronto..
return String.CompareOrdinal(hp1.HostName, hp2.HostName);
Smart and Easy...
Nessun commento:
Posta un commento