Avatar billede lifo Nybegynder
20. maj 2004 - 07:33 Der er 1 kommentar og
1 løsning

sortere IP Addresser

nogen der har en god algoritme til at sortere
ip adresser
altså ud fra tekst

sådan at
192.168.1.68
kommer før
192.168.1.123

om man bruger compare så bliver der sammenlignet char for char
Avatar billede lifo Nybegynder
20. maj 2004 - 08:04 #1
lige meget jeg lavede en selv
den er måske ikke så elegant men den fungerer

public int Compare(object x, object y)
{
  IPAddress ip1 = IPAddress.Parse(((ListViewItem)x).SubItems[col].Text);
  IPAddress ip2 = IPAddress.Parse(((ListViewItem)y).SubItems[col].Text);
  byte[] ipByte1 = ip1.GetAddressBytes();
  byte[] ipByte2 = ip2.GetAddressBytes();
  if(col==1)
  {
    if(ascending)
    {
      if(    ipByte1[0]<ipByte2[0]) return -1;
    else if(ipByte1[0]>ipByte2[0]) return 1;
    else if(ipByte1[1]<ipByte2[1]) return -1;
    else if(ipByte1[1]>ipByte2[1]) return 1;
    else if(ipByte1[2]<ipByte2[2]) return -1;
    else if(ipByte1[2]>ipByte2[2]) return 1;
    else if(ipByte1[3]<ipByte2[3]) return -1;
    else if(ipByte1[3]>ipByte2[3]) return 1;
    return 0;
    }
  else
  {
  if(    ipByte2[0]<ipByte1[0]) return -1;
    else if(ipByte2[0]>ipByte1[0]) return 1;
    else if(ipByte2[1]<ipByte1[1]) return -1;
    else if(ipByte2[1]>ipByte1[1]) return 1;
    else if(ipByte2[2]<ipByte1[2]) return -1;
    else if(ipByte2[2]>ipByte1[2]) return 1;
    else if(ipByte2[3]<ipByte1[3]) return -1;
    else if(ipByte2[3]>ipByte1[3]) return 1;
    return 0;
  }
  }else
  if(ascending)
  return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
  else return String.Compare(((ListViewItem)y).SubItems[col].Text,((ListViewItem)x).SubItems[col].Text );
}
Avatar billede lifo Nybegynder
20. maj 2004 - 08:20 #2
ok lavede en anden version
public class ListViewItemComparer : IComparer
    {
        private int col;
        private static int way1=1;
        private static int way2=-1;
        public static bool ascending;
        public ListViewItemComparer()
        {
            col = 0;
        }
        public ListViewItemComparer(int column)
        {
            col = column;
            if(ascending!=true)
            {
                ascending=true;
                way1=1;
                way2=-1;
            }
            else
            {
                ascending=false;
                way1=-1;
                way2=1;
            }
        }
        public int Compare(object x, object y)
        {
            {
                if(col==1)
                {
                    IPAddress ip1 = IPAddress.Parse(((ListViewItem)x).SubItems[col].Text);
                    IPAddress ip2 = IPAddress.Parse(((ListViewItem)y).SubItems[col].Text);
                    byte[] ipByte1 = ip1.GetAddressBytes();
                    byte[] ipByte2 = ip2.GetAddressBytes();
                    for(int i=0;i<4;i++)
                    {
                        if(ipByte1[i]<ipByte2[i]) return way1;
                        else if(ipByte1[i]>ipByte2[i]) return way2;
                    }
                    return 0;
                }else
                if(ascending)
                    return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
                else return String.Compare(((ListViewItem)y).SubItems[col].Text,((ListViewItem)x).SubItems[col].Text );
            }
        }
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester