使用TCL查找dict中值的最大绝对值

时间:2014-01-28 16:20:48

标签: list sorting tcl

我有一个列表,例如MyList

 set MyList [ list 508 1.648E-01 509 1.670E-01 510 1.701E-01 511 1.740E-01 512 1.784E-01 ]

如何提取键/值对,其中:值的绝对值是列表中的最大值? (这是一句话......)

在这种情况下512 1.784E-01

我会创建一个foreach循环,并在abs(Value)大于前一对时保存键值。有没有循环的方法?我在tcl 8.5,所以“lsort -stride”技巧是遥不可及的。

2 个答案:

答案 0 :(得分:2)

直截了当的方法是使用dict for对字典进行经典的迭代迭代。

set maxVal -Inf
dict for {k v} $MyList {
    if {$v > $maxVal} {
        set maxKey $k
        set maxVal $v
    }
}

-Inf?小于每个其他值的数值。 (有时IEEE算法很棒。)

答案 1 :(得分:1)

我会创建一个包含键/值子列表的新列表

foreach {k v} $MyList {lappend newlist [list $k $v]}

然后使用

lassign [lindex [lsort -real -index 1 $newlist] end] max_key max_val