13. januar 2007 - 23:57
Der er
9 kommentarer og 1 løsning
arraylist af objekter
sidste spørgsmål herfra idag ;) Jeg har en arraylist som indeholder en rækker objekter af typen vare. Vare: vareNr, vareAntal... Hvis jeg skal tjekke om mit array indeholder et object hvor vareNr er sat til TempVareNr, hvordan gør jeg så det? og hvordan opdaterer jeg det? altså hvis den findes så skal den lægge 1 til.
Annonceindlæg fra Computerworld it-jobbank
14. januar 2007 - 00:10
#1
en ArrayList har faktisk en Contains metode som kan bruges til det (hvis de objekter man leder efter har en passende Equals og GetHashCode metode.
14. januar 2007 - 00:16
#2
ArrayList varer; private void addItem(string itemNo){ bool itemFound = false; for(int i=0;i<varer.Count;i++){ if(varer[i].vareNr.Equals(tmpVareNr)){ varer[i].vareAntal++; itemFound = true; } } if(!itemFound) varer.Add(varen med det valgte varenummer); }
14. januar 2007 - 00:18
#3
Hov... sådan private void addItem(string itemNo){ bool itemFound = false; for(int i=0;i<varer.Count;i++){ if(varer[i].vareNr.Equals(itemNo)){ varer[i].vareAntal++; itemFound = true; } } if(!itemFound) varer.Add(varen med det valgte varenummer); }
14. januar 2007 - 00:23
#4
i .NET 2.0 har List<> nogle rigtigt smarte metoder til det som vil være langt bedre end ArrayList
14. januar 2007 - 21:32
#5
skov_p >får denne fejl 'object' does not contain a definition VareNr når jeg prøver din kode arne_v>hender godt Equals, det jeg mangler er helt konkret hvordan jeg henviser til lige nøjagtig den property i mit array. Altså varer[i].VareNr men det virker så ikke lige.
14. januar 2007 - 21:33
#6
arne_v: ja kunne godt være jeg skulle få sat mig grundig ind i 2.0, kan se der er mange muligheder jeg ikke bruger. Har en slem tendens til at gøre det mere besværligt for mig selv, end det behøver. Men det kommer vel med øvelsen.
14. januar 2007 - 21:44
#7
Sorry vi skal jo lige have fortalt at objekterne er af typen Vare. Med As keyword bliver objectet betragtet som den type angivet efter As private void addItem(string itemNo){ bool itemFound = false; for(int i=0;i<varer.Count;i++){ if((varer[i] as Vare).vareNr.Equals(itemNo)){ (varer[i] as Vare).vareAntal++; itemFound = true; } } if(!itemFound) varer.Add(varen med det valgte varenummer); }
14. januar 2007 - 21:59
#8
eksempel med Equals: using System; using System.Collections; namespace E { public class Vare { private int varenr; private string varenavn; private int vareantal; public Vare() : this(0, "", 0) { } public Vare(int varenr, string varenavn, int vareantal) { this.varenr = varenr; this.varenavn = varenavn; this.vareantal = vareantal; } public int Varenr { get { return varenr; } set { varenr = value; } } public string Varenavn { get { return varenavn; } set { varenavn = value; } } public int Vareantal { get { return vareantal; } set { vareantal = value; } } public override String ToString() { return "(" + varenr + "," + varenavn + "," + vareantal + ")"; } public override bool Equals(object o) { if (o is Vare) { if (Varenr == ((Vare)o).Varenr) { return true; } else { return false; } } else { return false; } } public override int GetHashCode() { return varenr.GetHashCode(); } } public class VareList { private ArrayList varer; public VareList() { varer = new ArrayList(); } public void Add(Vare v) { int ix = varer.IndexOf(v); if(ix >= 0) { ((Vare)varer[ix]).Vareantal += v.Vareantal; } else { varer.Add(v); } } public void Print() { foreach(Vare v in varer) { Console.WriteLine(v); } } } public class MainClass { public static void Main(string[] args) { VareList varer = new VareList(); varer.Add(new Vare(1001, "A", 1)); varer.Add(new Vare(1002, "B", 2)); varer.Add(new Vare(1003, "C", 3)); varer.Print(); varer.Add(new Vare(1002, "B", 10)); varer.Add(new Vare(1001, "A", 1)); varer.Add(new Vare(1004, "D", 4)); varer.Print(); } } }
14. januar 2007 - 22:05
#9
og med .NET 2.0 predicate: using System; using System.Collections.Generic; namespace E { public class Vare { private int varenr; private string varenavn; private int vareantal; public Vare() : this(0, "", 0) { } public Vare(int varenr, string varenavn, int vareantal) { this.varenr = varenr; this.varenavn = varenavn; this.vareantal = vareantal; } public int Varenr { get { return varenr; } set { varenr = value; } } public string Varenavn { get { return varenavn; } set { varenavn = value; } } public int Vareantal { get { return vareantal; } set { vareantal = value; } } public override String ToString() { return "(" + varenr + "," + varenavn + "," + vareantal + ")"; } public bool SameVarenr(Vare v) { return Varenr == v.Varenr; } } public class VareList { private List<Vare> varer; public VareList() { varer = new List<Vare>(); } public void Add(Vare v) { int ix = varer.FindIndex(v.SameVarenr); if(ix >= 0) { varer[ix].Vareantal += v.Vareantal; } else { varer.Add(v); } } public void Print() { foreach(Vare v in varer) { Console.WriteLine(v); } } } public class MainClass { public static void Main(string[] args) { VareList varer = new VareList(); varer.Add(new Vare(1001, "A", 1)); varer.Add(new Vare(1002, "B", 2)); varer.Add(new Vare(1003, "C", 3)); varer.Print(); varer.Add(new Vare(1002, "B", 10)); varer.Add(new Vare(1001, "A", 1)); varer.Add(new Vare(1004, "D", 4)); varer.Print(); Console.ReadLine(); } } }
23. januar 2007 - 21:56
#10
Ser sq smart ud arne_v det må jeg give dig. Er endelig færdig med mit projekt, så nu må jeg vist få sat mig grundigt ind i 2.0, så mange tak. Spørgsmålet her, var det det skov_p svarede som jeg efterlyste. Så tak for svar.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.