Красивее - да. Но как я и сказал - для этого уже есть Arr
. И он ещё и лучше, потому что можно явно указать тип элементов.
Я внимательно прочитал, все посты от всех.
Дело не в этом. Если делать через диапазонный тип - запись [1,2,3]
легко в конструкторе диапазона превратить в то же самое что [1..3]
, без особых ударов по производительности.
И тогда if x in [...]
, к которому все больше привыкли, будет работать не менее эффективно чем в старой реализации. С единственной поправкой - теперь диапазон надо кешировать ручками. Хотя кеширование тоже не сложно реализовать, тупо скопипастить код от set of T
.
Ну и собственно насчёт реализации диапазонов - предлагаю сортированное дерево единичных диапазонов.
То есть разворачивание [1,3..5,7]
в:
o
/ \
(1..1) o
/ \
(3..5) (7..7)
При этом если добавить в диапазон значение [2]
- элементы [1]
и [3..5]
склеятся и получится [1..5]
.