2016-05-24 8 views
-1

У меня есть 3 массива, которые можно установить или нет. Их ключи - это строки.Корпус выключателя Vs. Если .. Else (конкретная задача)

было бы более эффективным, это если ... Else

if(isset($arrayA[ $id ])) 
{ 
    if(isset($arrayB[ $id ])) 
    { 
     if(isset($arrayC[ $id ])) 
     { 
     } 
     else 
     { 
     } 
    } 
    else 
    { 
     if(isset($arrayC[ $id ])) 
     { 
     } 
     else 
     { 
     } 
    } 
} 
else 
{ 
    if(isset($arrayB[ $id ])) 
    { 
     if(isset($arrayC[ $id ])) 
     { 
     } 
     else 
     { 
     } 
    } 
    else 
    { 
     if(isset($arrayC[ $id ])) 
     { 
     } 
    } 
} 

или переключатель ... Дело, как это?

$ABC = (isset($arrayA[ $id ]) ? "1" : "0") . (isset($arrayB[ $id ]) ? "1" : "0") . (isset($arrayC[ $id ]) ? "1" : "0"); 

switch($ABC) 
{ 
    case "001": 
    case "010": 
    case "011": 
    case "100": 
    case "101": 
    case "110": 
    case "111": 
} 

Обратите внимание, что случай «000» никогда не будет происходить в моем сценарии.

Предположим, что знаю частоту комбинаций. Чаще -> "110" "111" "010" "100", "101", "001" "011" < - Реже

Во всяком случае "110" и "111" происходят почти всегда. «010» может произойти 1 раз на 10^4 или 10^5 раз кумулятивное событие «110» + «111».

Будет ли это Если ... еще лучшее решение?

if(isset($arrayA[ $id ]) and isset($arrayB[ $id ])) 
{ 
     if(isset($arrayC[ $id ])) 
     { 
     } 
     else 
     { 
     } 
} 
else 
{ 
    $ABC = (isset($arrayA[ $id ]) ? "1" : "0") . (isset($arrayB[ $id ]) ? "1" : "0") . (isset($arrayC[ $id ]) ? "1" : "0"); 

    switch($ABC) 
    { 
     case "001": 
     case "010": 
     case "011": 
     case "100": 
     case "101": 
    } 
} 
+0

Кому это нужно? Это микро-оптимизация. Только не надо. –

+0

его более эффективный в этом случае переключатель, потому что JVM загружает значение для сравнения и выполняет итерацию через таблицу значений, чтобы найти совпадение. Для многих случаев лучше Switch –

+1

Это не Java, а PHP, и для этого типа кода я считаю, что читаемость будет иметь большее значение, чем преждевременная оптимизация. Поэтому выберите тот, который является более читаемым и, если необходимо, прокомментируйте. –

ответ

0

Идём на switch. Его более читаемый в этом случае и вы можете отслеживать выходы более легко, чем серия if-else, которую вы развернули. Последнее, что вы хотите, - заставить вас и того, кто еще будет работать над вашим кодом, запутаться с помощью ненужной сложности. Будь проще.

+0

Никто не будет работать над моим кодом. Это свободное время программирования. Я понимаю вопрос сложности. –

0

Что касается времени выполнения, было бы предпочтительным ваше решение с одним единственным оператором switch, так как ему не нужно 3 сравнения, чтобы перейти к «правильному» методу. Иерархия оператора switch не имеет большого значения, но я думаю, что для таких простых вычислений разница не была бы существенной, если бы вы использовали только коммутатор или комбинированный коммутатор.

Вы можете указать время работы для вашего наилучшего случая сценарий с последним методом. Во всяком случае, только с помощью операторов switch будет производить точно такую ​​же сложность во всех трех случаях.

+0

Хорошая идея. Я сообщу результаты, если я нажму время операции. –

Смежные вопросы