21. januar 2007 - 15:17Der er
22 kommentarer og 1 løsning
Korrekt sortering af objekter (3 kriterier)
Jeg har et bruger objekt med følgende attributter knyttet til sig:
Point (int) HireDate (Dato) Birthday (Dato)
Jeg har så en liste af brugere i en database. Jeg henter alle brugerobjekterne ind i en arrayliste sorteret efter point(ASC). Jeg skal bruge en kodestump der kan sortere listen korrekt når der er sammenfald i point og ansættelsesdato.
Lad os antage at point for de første 5 brugere er følgende:
10,20,20,20,30 //Point
Her skal der for de 3 brugere med point sammenfald sorteres efter HireDate(ASC). Hvis der så er sammenfald ved HireDate skal der ved de brugere hvor der er sammenfald sorteres efter Birthday.
Jeg ønsker altså hjælp til at lave en stump kode(C#) der kan klare denne hurdle. Spørg endelig hvis jeg ikke har udtrykt mig klart nok, eller der skal bruges yderligere info.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Kalp jeg har prøvet at sortere direkte i SQL, men da min HireDate og Birthday er strings gør den det ikke korrekt. Jeg laver disse om til datoer i koden (har altid haft probs med db dato kontra .net dato)
Dr_chaos det ser ud til at være sådan noget jeg skal bruge. Jeg vil kigge på det og vende tilbage.
har du muligvis et eksempel på konverteringen i SQL chaos? Hvis det virker vil det klart være det letteste.
Min SQL ser således ud:
// // *getUsers Function* input: Department(int), Year(int) Output: ArrayList af Users // public ArrayList getUsers(int Department, int Year) { string sql = "SELECT * FROM Person, Contact, YearlyPoints WHERE Person.MANr=Contact.MAnr AND Contact.MAnr=YearlyPoints.MAnr AND Person.IsActive=true AND YearlyPoints.Year=2006 AND Person.Department=" + Department + " ORDER BY YearlyPoints.Points ASC, Person.HireDate ASC"; Foundation foundation = new Foundation(); ArrayList result = foundation.selectUsers(sql); return result; }
string sql = "SELECT * FROM Person, Contact, YearlyPoints WHERE Person.MANr=Contact.MAnr AND Contact.MAnr=YearlyPoints.MAnr AND Person.IsActive=true AND YearlyPoints.Year=2006 AND Person.Department=" + Department + " ORDER BY YearlyPoints.Points ASC, convert(DateTime,Person.HireDate,105) ASC";
Nu er jeg pænt sagt ikke så god til access sql :) Men prøv lige med:
noget i denne stil:
string sql = "SELECT * FROM Person, Contact, YearlyPoints WHERE Person.MANr=Contact.MAnr AND Contact.MAnr=YearlyPoints.MAnr AND Person.IsActive=true AND YearlyPoints.Year=2006 AND Person.Department=" + Department + " ORDER BY YearlyPoints.Points ASC, CDate(Format([Person.HireDate],"mm/dd/yyyy")) ASC";
Det her har simpelthen sparet mig for så meget tid at det forstår man jo slet ikke. Jeg havde overhovedet ikke overvejet at der var funktioner der kunne klare dette. Du skal også have lidt point Kalp. Det var trods alt dig der ledte os på sporet. Chaos var så bare den geniale der hurtigt kunne fikse en løsning, derfor har han også fået "en større kage" :)
jeg behøver ikke point for min deltagelse i spørgsmålet... jeg kunne bare lade være med at sove længe;o)
Synes godt om
Ny brugerNybegynder
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.