有人知道在包含浮动值的列表中选择特定值的方法(即与 Lindex 等效的方法)用于列表中的整数)?
答案 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
)