TCL - выберите n-й член в списке плавающих значений - PullRequest
0 голосов
/ 21 марта 2019

Кто-нибудь знает способ выбора определенного значения в списке, состоящем из плавающих значений (т. Е. Эквивалентный метод Lindex , используемый для целых чисел в списке)?

1 Ответ

1 голос
/ 22 марта 2019

Команда 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, если его там еще нет)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...