У меня есть 3 разных переменных, которые все 3 могут иметь 2 разных значения. Каждой комбинации нужно что-то делать. Я могу привести все это в инструкцию IF, но мне было интересно, нет ли более элегантного/правильного/более короткого решения. 3 переменные могут иметь значение 1 или 0 (например, бинарная таблица истинности).IF-заявление или что-то более эффективное?
0
A
ответ
0
Хотя это не строго более эффективной чем бинарное разветвление (если вы не можете предсказать частоту аргументов), одна альтернативы использовать особенность синтаксиса VBA и поместить его в Select Case
структуре:
Private Sub Example(one As Boolean, two As Boolean, three As Boolean)
Select Case True
Case one And Not two And Not three
Debug.Print "Case 1"
Case one And Not two And three
Debug.Print "Case 2"
Case one And two And Not three
Debug.Print "Case 3"
Case one And two And three
Debug.Print "Case 4"
Case two And Not three
Debug.Print "Case 5"
Case two And three
Debug.Print "Case 6"
Case three
Debug.Print "Case 7"
Case Else
Debug.Print "Case 8"
End Select
End Sub
Это, конечно, легче смотреть, чем альтернатива, если:
Private Sub Example2(one As Boolean, two As Boolean, three As Boolean)
If one Then
If two Then
If three Then
Debug.Print "Case 4"
Else
Debug.Print "Case 3"
End If
Else
If three Then
Debug.Print "Case 2"
Else
Debug.Print "Case 1"
End If
End If
Else
If two Then
If three Then
Debug.Print "Case 6"
Else
Debug.Print "Case 5"
End If
Else
If three Then
Debug.Print "Case 7"
Else
Debug.Print "Case 8"
End If
End If
End If
End Sub
Когда я тест против худшего случая (отдельные трассы, очищая немедленное окно между каждым) й разница в производительности составляет порядка 20 мс и более миллиона итераций. Подавляющее большинство приростов производительности придет от определения порядка, вы оцениваете переменные - то есть, какие ветви более вероятны.
Смежные вопросы
- 1. Более эффективное регулярное выражение или альтернатива?
- 2. Более эффективное имя запроса
- 3. Более эффективное использование словарей
- 4. pymongo: более эффективное обновление
- 5. Более эффективное клонирование jQuery
- 6. Более эффективное использование XMLReader
- 7. Более эффективное использование apache?
- 8. Эффективное соединение более 2 data.tables
- 9. Более эффективное использование быстрого времени
- 10. Более эффективное использование переменных JavaScript?
- 11. Какое более эффективное регулярное выражение?
- 12. Более эффективное структурирование SQL-запросов
- 13. Более эффективное преобразование WinForms в WPF или WPF в Winforms
- 14. VB Asp.net Передача параметра в подзапрос или более эффективное решение?
- 15. Более эффективное двойное COALESCE присоединиться к альтернативному
- 16. Действительно ли DRY означает более эффективное приложение?
- 17. Вложенные петли foreach - что-нибудь более эффективное?
- 18. Более эффективное слияние строк в Python
- 19. Более эффективное сокращенном использование IF оператор C#
- 20. Более эффективное решение? Словарь как разреженный вектор
- 21. Более эффективное заявление Союза, чем это?
- 22. Более эффективное преобразование xml-файла в dataframe
- 23. Более эффективное сравнение двух рулонов кости - Python
- 24. Что-то более эффективное, чем Sprite/BufferedImage.
- 25. Более эффективное SQLite Внутреннее соединение и многопоточность
- 26. Более эффективное СТЛ как способ выполнения операции,
- 27. Более эффективное левое соединение большого стола
- 28. matlab более эффективное создание случайных ссылок
- 29. Ищете более эффективное программное обеспечение zoom
- 30. Баш более эффективное использование SED/AWK
Вложенные операторы if являются наиболее эффективным способом обработки этого дерева решений. – Mangist
https://support.office.com/en-us/article/IIf-Function-32436ecf-c629-48a3-9900-647539c764e3 – Vasily
что вы уже тестировали? –