TCL-在浮点值列表中选择第n个项

时间:2019-03-21 17:37:43

标签: tcl

有人知道在包含浮动值的列表中选择特定值的方法(即与 Lindex 等效的方法)用于列表中的整数)?

1 个答案:

答案 0 :(得分:1)

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