使用 Tcl 的应用功能对列表进行排序



假设我有一个如下所示的列表:

set listNums {0 -1 5 5 -5 1 10 100 -10 -10 1000}

我想使用绝对值对其进行排序。我从另一个脚本中挑选了以下内容。我很难理解这一点。有人可以帮助我了解以下脚本中发生了什么吗?我使用"看跌期权"在每个阶段打印出值,但我仍然没有得到它!

">

a"和"b"如何更新?为什么我们需要"返回 0"?
对不起,如果我问的是基本问题。

lsort -command {apply {
  {a b}
  {
    if {[expr {abs($a)] < [expr {abs($b)}]} {return -1}
    if {[expr {abs($a)] > [expr {abs($b)}]} {return 1}
    if {$a < $b} {return -1}
    if {$a > $b} {return 1}
    return 0
  }
}} $listNums

每次在排序过程中比较两个元素时,一个元素作为 a 传递到此调用中,另一个作为 b。

比较结果可以是"小于"、"大于"或"等于",编码为返回值 -1、1 或 0。

另外,请尝试

if {abs($a) < abs($b)} ... 

相反:if 的条件隐式调用 expr。

并且不要比较两次。

文档:应用如果lsort

相关内容

  • 没有找到相关文章

最新更新