Wisselen van de inhoud van arrays

Status
Niet open voor verdere reacties.

Zakelijk

Gebruiker
Lid geworden
13 mei 2009
Berichten
9
Ik heb een stukje code gemaakt waarvan ik niet zeker weet of het wel goed is
Ik wil hierbij Voornaam van Personeelslijst op alfabetische volgorde sorteren

iig, ik heb de belangrijkste stukjes er uit gehaald voor de duidelijkheid.
je komt //wissel personeelslijst[j] met personeelslijst[j+1] tegen, ik wil hier een methode toepassen die de inhoud van j en j+1 wisselt met elkaar.
je komt ook PersoneelsLijst[j].Voornaam tegen. Ik weet niet of dit zo kan maar het is de bedoeling dat Voornaam word gesorteerd.
Kan iemand me hiermee helpen?

Code:
namespace FormMedewerker
{
    public partial class Form1 : Form
    {
        
	Medewerker[] PersoneelsLijst = new Medewerker[10];


        private void butSorteer_Click(object sender, EventArgs e)
        {
            sorteer(PersoneelsLijst);
        }


        private void sorteer(Medewerker[] PersoneelsLijst)
        {
            for (int i = 0; i < PersoneelsLijst; i++)
            {
                for (int j = 0; j < PersoneelsLijst - 1; j++)
                {
                    if(PersoneelsLijst[j].Voornaam > PersoneelsLijst[j+1].Voornaam)
                        //wissel personeelslijst[j].Voornaam met personeelslijst[j+1].Voornaam

                }
            }
        }

    }
}
 
Laatst bewerkt:
Ik heb hiervoor 3 methodes ... ik heb de op 1 na beste en tevens de simpelste methode even geimplementeerd:

Eerste aanpassing: medewerker class

Code:
 public class Medewerker[COLOR="Red"]:IComparable[/COLOR]
    {
        string Voornaam { get; set; }

        // Nog veel meer code, maar die is niet nodig voor de sort ... :D        

        #region IComparable Members

        [COLOR="red"]public int CompareTo(object obj)
        {
            try
            {
                Medewerker m = (Medewerker) obj;
                return this.Voornaam.CompareTo(m.Voornaam);
            }
            catch
            {
                return -1;
            }
        }[/COLOR]

        #endregion
    }

2 de aanpassing: hoe moet je nu sorteren?

Code:
namespace FormMedewerker
{
    public partial class Form1 : Form
    {
        
        Medewerker[] PersoneelsLijst = new Medewerker[10];

        [COLOR="seagreen"]// De correcte prefix voor een button is 'btn', maar dit terzijde ;)[/COLOR]
        private void [COLOR="SeaGreen"]but[/COLOR]Sorteer_Click(object sender, EventArgs e)
        {
            [COLOR="Red"]Array.Sort(PersoneelsLijst);[/COLOR]            
            //om toe te voegen aan een listbox:
            lstMedewerks.Items.AddRange(PersoneelsLijst);       
        }

    }
}

This should do fine!
 
Ik heb hiervoor 3 methodes ... ik heb de op 1 na beste en tevens de simpelste methode even geimplementeerd:

Eerste aanpassing: medewerker class

Code:
 public class Medewerker[COLOR="Red"]:IComparable[/COLOR]
    {
        string Voornaam { get; set; }

        // Nog veel meer code, maar die is niet nodig voor de sort ... :D        

        #region IComparable Members

        [COLOR="red"]public int CompareTo(object obj)
        {
            try
            {
                Medewerker m = (Medewerker) obj;
                return this.Voornaam.CompareTo(m.Voornaam);
            }
            catch
            {
                return -1;
            }
        }[/COLOR]

        #endregion
    }

2 de aanpassing: hoe moet je nu sorteren?

Code:
namespace FormMedewerker
{
    public partial class Form1 : Form
    {
        
        Medewerker[] PersoneelsLijst = new Medewerker[10];

        [COLOR="seagreen"]// De correcte prefix voor een button is 'btn', maar dit terzijde ;)[/COLOR]
        private void [COLOR="SeaGreen"]but[/COLOR]Sorteer_Click(object sender, EventArgs e)
        {
            [COLOR="Red"]Array.Sort(PersoneelsLijst);[/COLOR]            
            //om toe te voegen aan een listbox:
            lstMedewerks.Items.AddRange(PersoneelsLijst);       
        }

    }
}

This should do fine!

Het is me niet helemaal gelukt.
als ik op de sorteer button klik komt er een fout:
"ArgumentNullException was unhandled
waarde kan niet null zijn.
Parameternaam: item"

wat is het verschil tussen Items.Add en Items.AddRange ?
want als ik er .Add van maak komt er geen foutmelding maar in de listbox komt te staan:
Medewerker[]-matrix

Even voor de duidelijkheid. Er zijn in totaal 5 medewerkers die een voornaam, achternaam en salaris hebben. Ze zijn handmatig aangemaakt in mijn script. En ik wil de sortering in de arrays maken en niet in mijn listbox.
 
Om die ArgumentNullException weg te werken moet je:

Medewerker[] PersoneelsLijst = new Medewerker[5];

Vermits je maar 5 medewerkers hebt!

Verschil tussen add en addrange:

  • Add: Je voegt het item tussen haakjes toe aan je lijst
  • AddRange: kan enkel bij arrays: elk item in die array wordt appart toegevoegd
  • AddRange kan ook worden "gefaket" door een for-lus te gebruiken en elk item uit de array te overlopen en appart toe te voegen (dus met add)!

Medewerker[]-matrix: dit is wat je krijgt als je een array omzet naar een string.
Je zal dit ook krijgen als je de medewerkers gaat toevoegen (per medewerker 1 natuurlijk ;)).
Je kan dit oplossen door de toString methode van je Medewerker class te overriden:

Code:
public override string toString()
{
      return this.Voornaam + " " + this.Achternaam; //bijvoorbeeld
}
 
Om die ArgumentNullException weg te werken moet je:

Medewerker[] PersoneelsLijst = new Medewerker[5];

Vermits je maar 5 medewerkers hebt!

Verschil tussen add en addrange:

  • Add: Je voegt het item tussen haakjes toe aan je lijst
  • AddRange: kan enkel bij arrays: elk item in die array wordt appart toegevoegd
  • AddRange kan ook worden "gefaket" door een for-lus te gebruiken en elk item uit de array te overlopen en appart toe te voegen (dus met add)!

Medewerker[]-matrix: dit is wat je krijgt als je een array omzet naar een string.
Je zal dit ook krijgen als je de medewerkers gaat toevoegen (per medewerker 1 natuurlijk ;)).
Je kan dit oplossen door de toString methode van je Medewerker class te overriden:

Code:
public override string toString()
{
      return this.Voornaam + " " + this.Achternaam; //bijvoorbeeld
}

ik heb het geprobeerd.
maar het lukt nog steeds niet, ik krijg 5x FormMedewerker.Medewerker te zien in de listbox als ik op sorteer klik
 
Laatst bewerkt:
Nevermind, ik heb het opgelost. WarnedGraph, bedankt voor je hulp!
topic kan worden gesloten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan