Dictionary 到Tcl中dict最后一个键的最快路径
假设我有一本Tcl字典。我希望以最快的方式获取最后输入的dict键(而不是值)。 理论上,我可以使用:Dictionary 到Tcl中dict最后一个键的最快路径,dictionary,tcl,Dictionary,Tcl,假设我有一本Tcl字典。我希望以最快的方式获取最后输入的dict键(而不是值)。 理论上,我可以使用:lindex[dict keys$dict]end有人知道其他更快的东西吗?这相当快: % set data {a 1 b 2 c 3} a 1 b 2 c 3 % proc p1 {} {dict get $::data [lindex [dict keys $::data] end]} % time {p1} 100000 1.87782 microseconds per iteration
lindex[dict keys$dict]end
有人知道其他更快的东西吗?这相当快:
% set data {a 1 b 2 c 3}
a 1 b 2 c 3
% proc p1 {} {dict get $::data [lindex [dict keys $::data] end]}
% time {p1} 100000
1.87782 microseconds per iteration
但记住最后一个键可以缩短约一微秒:
oo::object create mydict
oo::objdefine mydict {
variable data last
method add args {
lappend data {*}$args
set last [lindex [dict keys $data] end]
}
method getLast {} {
dict get $data $last
}
}
% mydict add a 1 b 2 c 3
c
% time {mydict getLast} 100000
0.82731 microseconds per iteration
文件:
,
,
,
,
,
,
,
,
,
,
,
我看到
[lindex$data end-1]
更快了
tclsh last.tcl
time_list : 1.0693949999999999 microseconds per iteration
time_dict : 279.470543 microseconds per iteration
last.tcl
set data [dict create]
for {set i 0} {$i < 10000} {incr i} {
dict set data "key_$i" $i
}
set time_dict [time {
set last_key [lindex [dict keys $data] end]
} 1000]
set time_list [time {
set last_key [lindex $data end-1]
} 1000]
puts "time_list : $time_list"
puts "time_dict : $time_dict"
设置数据[dict create]
对于{set i 0}{$i<10000}{incr i}{
dict set data“key_$i”$i
}
设定时间{
设置最后一个_键[lindex[dict keys$data]end]
} 1000]
设置时间\u列表[时间]{
设置最后一个_键[lindex$data end-1]
} 1000]
放置“时间列表:$time\u列表”
放入“时间记录:$time\u dict”
这可能是最快的;数据结构有信息可以更快地完成操作,但据我所知,以前没有人真正想要这个操作。