31. december 2004 - 00:21
Der er
13 kommentarer og
1 løsning
sortere objekter i arrayliste
Hejsa allesammen
og godt nytår
Jeg vil gerne sortere de objekter som jeg har liggende i en arrayliste som jeg har. Den hentes med denne linie i min webservice
ArrayList kampe = c.getAlleKampe();
navnet er lidt misvisende, for det er faktisk en liste med hold, men det vil jeg rette senere.
de objekter som ligger der, er som sagt hold, som er lavet med en contructor i hold klassen som ser sådan her ud.
public Hold(string holdNavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor, int point)
{
this.holdNavn = holdNavn;
this.vundneKampe = vundneKampe;
this.uafgjorteKampe = uafgjorteKampe;
this.tabteKampe = tabteKampe;
this.maalImod = maalImod;
this.maalFor = maalFor;
this.point = point;
}
jeg har så lavet en compare sådan her, også i hold klassen
public int Compare(object x, object y)
{
Hold h1 = (Hold) x;
Hold h2 = (Hold) y;
if(h1.getPoint() > h2.getPoint())
{
return 1;
}
if(h1.getPoint() < h2.getPoint())
return -1;
else
{
if((h1.getMaalHjemme() - h1.getMaalUde()) > (h2.getMaalHjemme() - h2.getMaalUde()))
return 1;
if((h1.getMaalHjemme() - h1.getMaalUde()) < (h2.getMaalHjemme() - h2.getMaalUde()))
return -1;
else
{
if(h1.getMaalHjemme() > h2.getMaalHjemme())
return 1;
if(h1.getMaalHjemme() < h2.getMaalHjemme())
return -1;
else
return 0;
}
}
}
men hvad skal jeg skrive i min controller, for at den sorterer mit arrayliste?
jeg har lavet denne her indtil videre.
ArrayList kampe = c.getAlleKampe();
kampe.Sort();
string ret = "";
foreach( object a in kampe)
{
Hold x = (Hold) a;
ret += x.getHoldNavn() + ";" +
((int) x.getVundneKampe() + x.getTabteKampe() + x.getUafgjorteKampe()).ToString() + ";" +
x.getVundneKampe().ToString() + ";" +
x.getUafgjorteKampe().ToString() + ";" +
x.getTabteKampe().ToString() + ";" +
x.getMaalHjemme().ToString() + ";" +
x.getMaalUde().ToString() + ";" +
x.getPoint().ToString() + "\n";
}
return ret;
men den der kampe.sort() gør ingenting....
31. december 2004 - 00:27
#3
Jeg lavede engang et sortering på alle mulige måder eksempel:
using System;
using System.Collections;
public class Foobar : IComparable
{
private int a;
private string b;
public Foobar() : this(0, "")
{
}
public Foobar(int a, string b)
{
this.a = a;
this.b = b;
}
public int A
{
get
{
return a;
}
set
{
a = value;
}
}
public string B
{
get
{
return b;
}
set
{
b = value;
}
}
public int CompareTo(object o)
{
return (a - ((Foobar)o).A);
}
public override string ToString()
{
return ("(" + a + "," + b + ")");
}
}
public class FoobarAComparer : IComparer
{
int IComparer.Compare(Object o1, Object o2)
{
return (((Foobar)o1).A - ((Foobar)o2).A);
}
}
public class FoobarRevAComparer : IComparer
{
int IComparer.Compare(Object o1, Object o2)
{
return -(((Foobar)o1).A - ((Foobar)o2).A);
}
}
public class FoobarBComparer : IComparer
{
int IComparer.Compare(Object o1, Object o2)
{
return (((Foobar)o1).B.CompareTo(((Foobar)o2).B));
}
}
public class FoobarRevBComparer : IComparer
{
int IComparer.Compare(Object o1, Object o2)
{
return -(((Foobar)o1).B.CompareTo(((Foobar)o2).B));
}
}
class ManySort
{
private static void print(string descr, ArrayList list)
{
Console.Write(descr + ": [");
foreach(object o in list)
{
Console.Write(o);
}
Console.WriteLine("]");
}
public static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(new Foobar(5, "AAAAA"));
list.Add(new Foobar(4, "BBBB"));
list.Add(new Foobar(3, "CCC"));
list.Add(new Foobar(2, "DD"));
list.Add(new Foobar(1, "E"));
print("Original", list);
list.Sort();
print("After natural sort (= sort on A)", list);
list.Sort(new FoobarRevAComparer());
print("After reverse sort on A", list);
list.Sort(new FoobarAComparer());
print("After sort on A", list);
list.Sort(new FoobarBComparer());
print("After sort on B", list);
list.Sort(new FoobarRevBComparer());
print("After reverse sort on B",list);
}
}
31. december 2004 - 00:30
#4
@Kalp
public ArrayList getAlleKampe()
{
resultater = new ArrayList();
// skal hente alle kampe, og udregne tabellen.
//
ArrayList temp = new ArrayList(kdb.getAll());
foreach(Kamp ka in temp)
{
hjemmehold = ka.getHjemmeHold().ToString();
udehold = ka.getUdehold().ToString();
hjemmemaal = ka.getHjemmeMaal();
udemaal = ka.getUdeMaal();
if(ka.getHjemmeMaal() > ka.getUdeMaal())
{
// HJEMMESEJR
// først skal der ligges point til hjemmehold
if(this.findesHold(ka.getHjemmeHold().ToString()) == true)
{
// tilføj point
this.addPoint(ka.getHjemmeHold().ToString(), 3);
// SÅ SKAL DER LIGGES EN VUNDNEKAMPE TIL HJEMMEHOLD
this.addVUTKampe(ka.getHjemmeHold().ToString(), 1, 0, 0);
}
else
{
// opret hold, tilføj point og VUT
this.opretHold(new Hold(ka.getHjemmeHold().ToString(), 0, 0, 0, 0, 0, 0));
this.addPoint(ka.getHjemmeHold().ToString(), 3);
this.addVUTKampe(ka.getHjemmeHold().ToString(), 1, 0, 0);
}
// så skal udeholdet have VUT
if(this.findesHold(ka.getUdehold().ToString()) == true)
{
// OG EN TABTEKAMPE TIL UDEHOLD
this.addVUTKampe(ka.getUdehold().ToString(), 0, 0, 1);
}
else
{
// opret hold og tildel VUT
opretHold(new Hold(ka.getUdehold().ToString(), 0,0,0,0,0,0));
this.addVUTKampe(ka.getUdehold().ToString(), 0,0,1);
}
}
if(ka.getHjemmeMaal() == ka.getUdeMaal())
{
// UAFGJORT
// først skal hjemmeholdet have point og VUT
if(this.findesHold(ka.getHjemmeHold().ToString()) == true)
{
// så skal mål og VUT ligges til hjemmeholdet
this.addPoint(ka.getHjemmeHold().ToString(), 1);
this.addVUTKampe(ka.getHjemmeHold().ToString(), 0, 1, 0);
}
else
{
// opret hold, og tilføj point og VUT
this.opretHold(new Hold(ka.getHjemmeHold().ToString(), 0, 0, 0, 0, 0, 0));
this.addPoint(ka.getHjemmeHold().ToString(), 1);
this.addVUTKampe(ka.getHjemmeHold().ToString(), 0, 1, 0);
}
if(this.findesHold(ka.getUdehold().ToString()) == true)
{
// så skal udeholdet have point og VUT
this.addPoint(ka.getUdehold().ToString(), 1);
this.addVUTKampe(ka.getUdehold().ToString(), 0, 1, 0);
}
else
{
// opret hold, og tildel point og VUT
this.opretHold(new Hold(ka.getUdehold().ToString(), 0,0,0,0,0,0));
this.addPoint(ka.getUdehold().ToString(), 1);
this.addVUTKampe(ka.getUdehold().ToString(), 0, 1, 0);
}
}
if(ka.getHjemmeMaal() < ka.getUdeMaal())
{
// UDESEJR
// Så skal hjemmeholdet have 0 point og VUT
if(this.findesHold(hjemmehold) == true)
{
// tilføj VUT, sal inge point have
this.addVUTKampe(hjemmehold, 0,0,1);
}
else
{
Hold holdTest = new Hold(hjemmehold, 0,0,0,0,0,0);
// opret hld og giv VUT
// this.opretHold(hjemmehold, 0,0,0,0,0,0);
opretHold(holdTest);
//opretHold(new Hold(hjemmehold, 0,0,0,0,0,0));
//Hold h = new Hold(hjemmehold, 0,0,0,0,0,0);
//opretHold(h);
this.addVUTKampe(hjemmehold, 0,0,1);
}
// så skal udejoldet have 3 point og VUT
if(this.findesHold(ka.getUdehold().ToString()) == true)
{
// Tildel udehold 3 point og VUT
this.addPoint(ka.getUdehold().ToString(), 3);
this.addVUTKampe(ka.getUdehold().ToString(), 1, 0, 0);
}
else
{
// opret hold først, 3 point og VUT
this.opretHold(new Hold(ka.getUdehold().ToString(), 0, 0, 0, 0, 0, 0));
this.addPoint(ka.getUdehold().ToString(), 3);
this.addVUTKampe(ka.getUdehold().ToString(), 1, 0, 0);
}
}
// SÅ SKAL DER LIGGES MÅL TIL BEGGE HOLD
// HJEMMEHOLD
if(this.findesHold(ka.getHjemmeHold().ToString()) == true)
{
// TILFØJ MÅL
this.addMaal(ka.getHjemmeHold().ToString(), ka.getHjemmeMaal(), ka.getUdeMaal());
}
if(this.findesHold(ka.getUdehold().ToString()) == true)
{
// TILFØJ MÅL
this.addMaal(ka.getUdehold().ToString(), ka.getUdeMaal(), ka.getHjemmeMaal());
}
}
return resultater;
}