我有一个列表,例如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”技巧是遥不可及的。
答案 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