Dictionary 到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

假设我有一本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
但记住最后一个键可以缩短约一微秒:

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”

这可能是最快的;数据结构有信息可以更快地完成操作,但据我所知,以前没有人真正想要这个操作。