kazzoo Skrevet 20. februar 2006 Del Skrevet 20. februar 2006 Jeg bruker Delphi: Jeg ønsker å kunne skrive inn operatorer litt effektivt: Tenkte først jeg kunne skrive if iTest = (12 or 13 or 14 or 15) then begin //Gjøre det jeg skal end Men dette funket ikke. Finnes det noen bedre måte å gjøre det på enn denne: if (iTest = 12) or (iTest = 13) or (iTest = 14) or (iTest = 15) then begin //Gjøre det jeg skal end For den siste måten blir VELDIG inneffektiv for meg da jeg skal gjøre flere hunder sånne tester med hardcoding. Lenke til kommentar
dstyle56 Skrevet 20. februar 2006 Del Skrevet 20. februar 2006 kan gjøres f.eks. slik: if iTest in [12..15] then begin end; vil du sjekke på flere intervall eller enkelttall ser det slik ut: if iTest in [12..15, 17, 19..25] then begin //kommer du hit er iTest mellom 12 og 25, men ikke 16 eller 18... end; Lenke til kommentar
kazzoo Skrevet 20. februar 2006 Forfatter Del Skrevet 20. februar 2006 if iTest in [12..15, 17, 19..25] thenbegin //kommer du hit er iTest mellom 12 og 25, men ikke 16 eller 18... end; 5634636[/snapback] Kjempe greier!! Akkurat det jeg trengte!! Lenke til kommentar
kazzoo Skrevet 1. mars 2006 Forfatter Del Skrevet 1. mars 2006 kan gjøres f.eks. slik: if iTest in [12..15] then begin end; vil du sjekke på flere intervall eller enkelttall ser det slik ut: if iTest in [12..15, 17, 19..25] then begin //kommer du hit er iTest mellom 12 og 25, men ikke 16 eller 18... end; 5634636[/snapback] Denne funket veldig bra til jeg skulle kjøre en test på et 4 siffret tall: if iTest in[1010] then begin end; Fikk da feilmelding at "Constant expression violates subrange bounds" Hvordan løse dette?!? Lenke til kommentar
DidzisK Skrevet 1. mars 2006 Del Skrevet 1. mars 2006 Jepp, IN kan kun brukes for å teste om noe inngår i SET. Og Set kan bare inneholde Byte verdier. Jeg pleier å bruke case, selv om det bare er snakk om ett valg: case i of 0, 1, 2002, 2003: begin end; end; Lenke til kommentar
kazzoo Skrevet 8. mars 2006 Forfatter Del Skrevet 8. mars 2006 Jepp, IN kan kun brukes for å teste om noe inngår i SET. Og Set kan bare inneholde Byte verdier. Jeg pleier å bruke case, selv om det bare er snakk om ett valg: case i of 0, 1, 2002, 2003: begin end; end; 5682720[/snapback] Men problemet blir jo da igjen at man ikke kan samle de sammen til en gruppe som man kunne gjøre med IN. Lenke til kommentar
DidzisK Skrevet 8. mars 2006 Del Skrevet 8. mars 2006 Men problemet blir jo da igjen at man ikke kan samle de sammen til en gruppe som man kunne gjøre med IN. case i of 0..100, 2002, 2003: begin end; end; Tar alle verdier fra 0 til 100 samt 2002 og 2003. Jeg ser ingen forskjell fra IN. Lenke til kommentar
hjahre Skrevet 13. mars 2006 Del Skrevet 13. mars 2006 Fungerer dette også med string og ikke bare integer? jeg skulle ha hatt en måte å finne ut om en string var lik en hel haug med andre stringer. som dette (bortsett fra at dette ikke funker): if str = ['string', 'string', 'string', 'string'] then ... Lenke til kommentar
DidzisK Skrevet 13. mars 2006 Del Skrevet 13. mars 2006 Fungerer dette også med string og ikke bare integer? Nei. Jeg også har lenge ønsket noe lignende som i SQL, hvor man kan skrive lange lister med "in", men nei, i Delphi må du pent skrive opp alle stringverdier med likhetstegn og "or" i en "if" statement. Eneste som av og til kan gjøre livet lettere er å legge alle verdier i en array / TStringList og gå gjennom elementene for å finne om denne verdien ligger i listen, men det lønner seg bare hvis du har mange verdier. Fra og med Delphi 2005 har man "for s in <list>" statement som gjør det enda fortere å skrive slik array-scanning (du slipper å skrive for i:=0 to list.count-1) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå