提问人:Lumpi 提问时间:1/29/2014 更新时间:1/29/2014 访问量:2332
使用 TCL 查找字典中值的最大绝对值
Find the max absolute value of values in a dict using 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”技巧遥不可及。
答:
1赞
glenn jackman
1/29/2014
#1
我将创建一个包含键/值子列表的新列表
foreach {k v} $MyList {lappend newlist [list $k $v]}
然后使用
lassign [lindex [lsort -real -index 1 $newlist] end] max_key max_val
评论
0赞
Johannes Kuhn
1/30/2014
或者在 8.6 中,您可以使用lsort -stride 2
2赞
Donal Fellows
1/29/2014
#2
最直接的方法是使用字典进行经典的迭代集合。dict for
set maxVal -Inf
dict for {k v} $MyList {
if {$v > $maxVal} {
set maxKey $k
set maxVal $v
}
}
这?小于其他所有值的数值。(IEEE算术有时很棒。-Inf
评论
0赞
Donal Fellows
1/29/2014
我不知道这是否会比格伦的答案更快。对于简短的数据集合,也许不是。应该有人测试。但是对于大型词典来说,这应该会获胜,因为它是一个简单的 O(N) 扫描,而不是 O(N) 扫描,然后是 O(NlogN) 排序......
评论
[list {key1 value1} {key2 value2} ...]
lsort -index 1 $MyList