Questo è il codice ipotetica, supponendo che ho il seguente:Come ottimizzare un'istruzione if else if in cui ifs precedenti non vengono utilizzati in loop?
Diciamo che ho un array e ha un sacco di dati, numeri interi in questa domanda di esempio, ma può qualsiasi tipo di dati che è già ordinato in qualche modo a riguarda le dichiarazioni if.
$a = array(0,0,0,1,1,1,1,1,1,2,2,2,2,3,3,...,9,9,9);
Diciamo che ho un ciclo for con numerose istruzioni if if if, e quelli possono avere qualsiasi criterio per fare qualcosa.
for($i=0; i<count($a); i++) {
// these if statements can be anything and may or may not be related with $a
if($a[$i] == 0 && $i < 10) {
// do something
}
else if($a[$i] == 1 && $i < 20) {
// do something
}
else if($a[$i] == 2) {
// do something
}
else if($a[$i] == 3) {
// do something
}
// and so on
}
Ora la domanda, dopo le prime iterazioni di istruzioni if, non viene mai utilizzata. Una volta che il ciclo for inizia a utilizzare l'istruzione if successiva, le istruzioni if precedenti non devono essere nuovamente valutate. Può usare la prima istruzione se n quantità di volte e così via e così via.
C'è un modo per ottimizzarlo in modo che non debba passare attraverso tutte le precedenti istruzioni if else if mentre esegue il looping dei dati? La mente, i dati possono essere qualsiasi cosa, e le dichiarazioni if possono essere una varietà di condizioni.
C'è un cambio di paradigma, che non vedo, che è richiesto su come questo dovrebbe essere codificato per fornire prestazioni ottimali?
Forse ... mantenere una variabile 'currentTier', controllare se ha bisogno di essere aggiornata (e farlo) all'inizio del ciclo, e quindi 'passare' su quello? – Michelle
@Michelle: lo stesso problema, in pratica. Una volta che il livello è sufficientemente alto, i primi casi sono sempre inutilizzati. Inoltre, stiamo parlando di intervalli anche qui. –
@ Madara> Penso che sia possibile assegnare un indice a ciascuno di if() e quindi utilizzare un interruttore() per guardare l'indice giusto. Se non si interrompe ogni caso, è possibile passare da if a if senza dover valutare i primi – koopajah