Gå til innhold

C#: Sortering av tabell med Objekter som datatype


Anbefalte innlegg

Jeg holder på med et program her der jeg blant annet har behov for å sortere en tabell bestående av objekter som datatype. Jeg har lyst å sortere tabellen på brukernavn eller dato....noen som kan hjelpe med dette?

 

Her er administartorklassen til programmet mitt:

 

namespace Øving_2
{
   using System;


   public class Administrator
   {
       private Brukernavn[] brukernavnTabell;
       private Passord[] passordTabell;
       private Dato[] datoTabell;
       private int used;

       public Administrator()
       {
           int size = 0;
           this.used = 0;
           this.brukernavnTabell = new Brukernavn[size];
           this.passordTabell = new Passord[size];
           this.datoTabell = new Dato[size];
       }


       public void LeggTil(Brukernavn brukernavn, Passord passord, Dato dato)
       {
           enlargeIfFull();
           this.brukernavnTabell[used] = brukernavn;
           this.passordTabell[used] = passord;
           this.datoTabell[used] = dato;
           this.used++;
       }

       public int brukte()
       {
           return this.used;
       }


       public Brukernavn skrivUtBrukernavn(int i)
       {
           return this.brukernavnTabell[i];
       }


       public Passord skrivUtPassord(int i)
       {
           return this.passordTabell[i];
       }


       public Dato skrivUtDato(int i)
       {
           return this.datoTabell[i];
       }


       public Brukernavn this[Passord passord]
       {
           get
           {
               int i = Array.IndexOf(this.passordTabell, passord);

               if (i != -1)
               {
                   return this.brukernavnTabell[i];
               }

               else return new Brukernavn();
           }
       }


       public Passord this[brukernavn brukernavn]
       {
           get
           {
               int i = Array.IndexOf(this.brukernavnTabell, brukernavn);

               if (i != -1)
               {
                   return this.passordTabell[i];
               }

               else return new Passord();
           }
       }


       public bool EndrePassord(Brukernavn brukernavn, string nyttPassord, Dato dato)
       {
           int i = Array.IndexOf(this.brukernavnTabell, brukernavn);

           if (i != -1)
           {
               this.passordTabell[i].EndrePassord(new Passord(nyttPassord));
               this.datoTabell[i] = dato;
               return true;
           }

           else return false;
       }


       public Dato visDato(Brukernavn brukernavn)
       {

       int i = Array.IndexOf(this.brukernavnTabell, brukernavn);

           if (i != -1)
           {
               return this.datoTabell[i];
           }

           else return new Dato();
       }


       private void enlargeIfFull()
       {
           if (this.used == this.brukernavnTabell.Length)
           {
               int bigger = used + 16;

               Brukernavn[] flereBrukernavn = new Brukernavn[bigger];
               this.brukernavnTabell.CopyTo(flereBrukernavn, 0);

               Passord[] flerePassord = new Passord[bigger];
               this.passordTabell.CopyTo(flerePassord, 0);

               Dato[] flereDatoer = new Dato[bigger];
               this.datoTabell.CopyTo(flereDatoer, 0);

               this.brukernavnTabell = flereBrukernavn;
               this.passordTabell = flerePassord;
               this.datoTabell = flereDatoer;
           }
       }
   }
}

Lenke til kommentar
Videoannonse
Annonse

Vet du hvordan du sorterer en tabell bestående av vanlige tall (integer for ex)?

 

Med objekt så blir det stortsett det samme, bortsett fra at du må bruke en funksjon som tester to stringer opp mot hverandre. Hva den funksjonen kalles i C# er jeg dog ikke sikker på.

 

Er selv vant med StrComp() fra vbs, men kan ikke garantere at det er det samme.

Lenke til kommentar
Det er VELDIG klumsete at du bruker arrays og flere tabeller.

 

Gjør det om til en klasse, og bruker List istedet, da kan du bruker Sort funksjonen, for eksempel slik:

bruker_liste.Sort((a, b) => a.Brukernavn.CompareTo(b.Brukernavn))

 

Skjønte ikke helt det med å gjøre om til klasse...kan du utdype dette litt? :)

Lenke til kommentar
public class User
{
 protected string m_username;
 protected byte[] m_pwd_hash;

 public static byte[] ComputePasswordHash(string password)
 {
var md5 = System.Security.Cryptography.MD5.Create();
return md5.ComputeHash(password);
 }

 public string Username { get { return m_username; } }
 public byte[] PasswordHash { get { return m_pwd_hash; } }
 public User(string username, string password)
 {
m_username = username;
m_pwd_hash = ComputePasswordHash(password);
 }
}

public static class Program
{
 public static void Main()
 {
var users = new List<User>();
users.Add(new User("root", "abc123"));
users.Add(new User("administrator", "abc123"));
users.Add(new User("Ole", "abc123"));
// Sorter etter brukernavn
users.Sort((a, b) => a.Username.CompareTo(b.Username));
 }
}

Endret av GeirGrusom
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...