2010-06-07 16 views
8

Ho il seguente codice. Sembra brutto, se il valore è uguale a uno dei seguenti valori, allora fai qualcosa.alternativa da verificare, se un valore è in un set

var 
    Value: Word; 
begin 
    Value := 30000; 
    if (Value = 30000) or (Value = 40000) or (Value = 1) then 
    do_something; 
end; 

voglio refactoring del codice come segue:

var 
    Value: Word; 
begin 
    Value := 30000; 
    if (Value in [1, 30000, 40000]) then // Does not work 
    do_something; 
end; 

Tuttavia, il codice refactoring non funziona. Presumo che un set valido in Delphi accetta solo elementi con tipo byte. Se esiste una valida alternativa al refactoring del mio codice originale (oltre all'utilizzo di case)?

risposta

15

Penso qualcosa del genere?

case value of 
    1, 30000, 40000: do_somthing 
end; 
+1

grazie, ma come ho notato nella mia domanda, voglio un'altra alternativa. Perché usare l'interruttore ... caso per una tale logica non sembra normale – stanleyxu2005

+0

@ stanleyxu2005. È probabilmente il più efficiente. E, inoltre, quando inizi a scrivere cose come queste, ci sono buone probabilità che tu possa finire per dover aggiungere un altro o anche un altro se condizione 'se valore in [.] Fai bla else se value in [..] fai blabla else do blablabla'. In tal caso, il caso è la scelta più ovvia. –

+0

Dopo un giorno di attesa per le risposte, sono d'accordo che l'uso di switch ... case è la soluzione più accettabile. – stanleyxu2005

13

Come utilizzare un array aperto?

function ValueIn(Value: Integer; const Values: array of Integer): Boolean; 
var 
    I: Integer; 
begin 
    Result := False; 
    for I := Low(Values) to High(Values) do 
    if Value = Values[I] then 
    begin 
     Result := True; 
     Break; 
    end; 
end; 

Esempio (pseudo-codice):

var 
    Value: Integer; 
begin 
    Value := ...; 
    if ValueIn(Value, [30000, 40000, 1]) then 
    ... 
end; 
+1

+1, bello, mi piace la riusabilità e la pulizia. –

1

C'è una classe per bitsets più grandi, vedi Classes.TBits.

Sebbene non faccia facilmente le espressioni costanti, può essere utile in certi altri casi.

Problemi correlati