Переключатель (ссылка на статью)
Комментарии:
2021-04-01 Александр Коновалов
В языках Си и Паскаль метками оператора case могут быть только целочисленные константы (включая константы перечислимого типа). И это неслучайно, так сделано для повышения производительности. Если диапазон между наибольшей и наименьшей меткой сравнительно небольшой и метки в этом диапазоне уложены плотно (при этом веток с одинаковыми метками быть не должно), то вместо цепочки ветвлений переключатель компилируется в вычислимый goto:
...
Если язык допускает нецелочисленные метки для переключателя, либо переменные в метках, то переключатель в таком случае будет лишь синтаксическим сахаром для условного оператора.
2021-04-03 alextretyak
Если диапазон между наибольшей и наименьшей меткой сравнительно небольшой и метки в этом диапазоне уложены плотноДанное условие для оптимизации конструкции switch соблюдать вовсе не обязательно, т.к. можно использовать HashMap {…}, у него также сложность будет O(1).
Если язык допускает нецелочисленные метки для переключателяЭта проблема аналогично решается с помощью HashMap, т.к. ключи у него вполне могут быть нецелочисленного типа, например строками.