Команда Tcl lindex
может работать с любым произвольным списком, но сами индексы должны быть либо целыми, либо относительными к концу (например, end-1
). Значения в списке могут определенно быть числами с плавающей запятой (или любым другим значением, включая строки и списки, имена переменных и фрагменты кода и дескрипторы базы данных и…).
set theList [list 1.23 2.34 3.45 [expr {4.56 + 5.67}]]
puts [lindex $theList 3]
Индексы должны быть целыми числами, потому что они логически подсчитывают позиции от начала списка (или, конечно, от конца списка для относительного конца). Нет смысла считать позиции, используя числа с плавающей запятой.
Если вы пытаетесь найти, где число с плавающей запятой будет принадлежать в отсортированном списке чисел с плавающей запятой, команда lsearch
- правильный инструмент (с опциями ниже).
set idx [lsearch -sorted -real -bisect $theList 6.78]
# Now $idx is the index where the value is *or* the index before where it would be inserted
# In particular, $idx+1 indicates the first element later than the value
Опции выше:
-sorted
- Сообщает команде lsearch
, что список отсортирован (поэтому он может использовать алгоритм двоичного поиска вместо линейного)
-real
- Сообщает команде lsearch
, что она использует сравнения с плавающей запятой
-bisect
- Говорит команде lsearch
найти ячейку для значения (а не возвращать -1
, если его там еще нет)