Avatar billede nuggibear Nybegynder
15. december 2003 - 22:45 Der er 10 kommentarer og
1 løsning

Udtræk af objekter i vektor på baggrund af flere kriterier?

Jeg sidder med et problem.
Jeg har en vektor der indeholder en række objekter
Jeg har en GUI hvor der kan vælges en række kriterier.

Hver gang der foretages et valg har jeg et objekt der samler denne oplysning og gemmer den.

Herefter er problemet at tage alle disse oplysninger, løbe vektoren igennem med en iterator og hente de objekter ud der opfylder alle kravene og lægge dem i en anden vektor.

selve iteration er ikke noget problem, men kan der tjekkes på om objekterne opfylder alle kravene uden at lave verdens største if-else løkke?

På forhånd tak

/Nuggibear
Avatar billede arne_v Ekspert
15. december 2003 - 22:47 #1
Jeg ville lave en sammenlignings funktion som f.eks. tog objekterne
og et array af boolean og så sammenlignede de felter hvor indikator
var true.

Det tror jeg vil give den pæneste sammenligning.
Avatar billede arne_v Ekspert
15. december 2003 - 22:54 #2
Noget a la:

public class X {
  ...
  public specialEquals(X x,boolean[] flag) {
      if(flag[0]) if(getA1()!=x.getA1()) return false;
      if(flag[1]) if(getA2()!=x.getA2()) return false;
      if(flag[2]) if(getA3()!=x.getA3()) return false;
      return true;
  }
}

hvsi du kan følge mig.
Avatar billede nuggibear Nybegynder
15. december 2003 - 23:00 #3
jeg forsøger at uddybe problemet lidt mere.
hvert kriterie kan sættes til 5 forskellige værdier og hvis objektet i vektoren opfylder kriterie 1 så skal kriterie 2 undersøges osv.
derudover kan et kriterie også have værdien "any"
således at objekterne opfylder kriteriet uanset hvilken værdi de har i det pågældende felt.
Objekterne i vektoren har således 10 felter som skal sammenlignes med de 10 værdier der er blevet sendt med til iteratoren.
Hvis alle værdierne passer skal objektet flyttes over i en anden vektor

Jeg tror derfor ikke umiddelbart at et array af booleans ville løse problemet, medmindre jeg ikke helt forstår din løsning?

/Nuggibear
Avatar billede arne_v Ekspert
15. december 2003 - 23:02 #4
Et kriterie med værdien any må svare til intet kriterie.
Avatar billede arne_v Ekspert
15. december 2003 - 23:06 #5
Jeg tror godt at min ide kan bruges til dig.

Lad os kalde klassen for X og de 10 værdier for a1..a10 med get metode.

Brugeren indtaster 3 kriterier:
  værdi 2 = "a"
  værdi 5 = "123"
  værdi 7 = "xyz"

Så laver du en X med null,"a",null,null,"123",null,"xyz",null,null,null
som værdier og og et flag array med false,true,false,false,true,false,true,false,false,false
og så sammenligner du ved hjælp af min metode (som så skal udvides fra 3 til 10).
Avatar billede nuggibear Nybegynder
15. december 2003 - 23:07 #6
ja, men jeg sender alle kriterierne med således at i samme øjeblik et kriterie ændres bliver listen sorteret ud fra alle kriterierne.

hvis du stadig mener at boolean array er løsningen må jeg bede dig om at skære kodeeksemplet lidt mere ud i pap? :-)
Avatar billede arne_v Ekspert
15. december 2003 - 23:10 #7
Mit forslag går udelukkende på hvordan du finder de objekter der matcher
kriterierne.

Hvordan du detecter en ændring af kriterierne og aktiverer den
søgning er en helt anden problem stilling.

Jeg mener at min løsning kan bruges til søgningen.
Avatar billede nuggibear Nybegynder
15. december 2003 - 23:33 #8
det med at detecte ændringer og aktivere søgningen er der styr på.

jeg forstår desværre ikke helt hvorledes flag array'et bliver oprettet?
skal alle objekterne i vektoren itereres igennem for udfylde arrayet med henholdsvis true eller false for om kriteriet er opfyldt for derefter at tjekke at alle positioner i arrayet er true for hver enkelt objekt?
Avatar billede arne_v Ekspert
15. december 2003 - 23:36 #9
I mit hoved ser jeg foran mig et skærm billede med:

feltnavn 1 label              textbox
feltnavn 2 label              textbox
....
feltnavn 10 label              textbox

og når så man skriver en værdi i 2,5, og 7 så konstruerer du
et flag array og et objekt som beskrevet ovenfor.
Avatar billede nuggibear Nybegynder
15. december 2003 - 23:59 #10
Jeg tror at der er gået et lys op for mig, jeg takker mange gange :-)

hvorledes tildeler jeg dig dine hårdt tjente point?
Avatar billede arne_v Ekspert
16. december 2003 - 00:03 #11
Jeg ligger et svar.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB