TCL中浮点数列表排序结果不符合预期,求正确实现方法
TCL浮点数排序异常解决方法
默认情况下,lsort命令是按字符串字典序排序的,这就是你得到错误结果的原因——它会优先比较字符串的首字符ASCII值,比如"10..."的首字符'1'小于"3..."的首字符'3',所以排在前面,完全不考虑数值实际大小。
要实现浮点数的升序数值排序,只需给lsort加上-real选项,它会自动将列表元素当作实数进行比较:
puts [lsort -real [list 22.678 11.456 7.6 3.521 8.9 4.987 9.245 10.7765]]
执行后就能得到你需要的升序结果:
3.521 4.987 7.6 8.9 9.245 10.7765 11.456 22.678
如果需要降序排序,可搭配-decreasing选项:
# 浮点数降序排序示例 puts [lsort -real -decreasing [list 22.678 11.456 7.6 3.521 8.9 4.987 9.245 10.7765]]
内容的提问来源于stack exchange,提问作者Vinh Nguyễn Phú
相关产品推荐
相关产品推荐

