Tcl:检查数组元素是否存在的最快方法

Tcl: fastest way to check for existence of array element

Tcl 中测试数组元素是否存在的最快方法是什么?

  1. 目前我使用info exists ::myArray($myKey),效率高吗?
  2. 我可以使用 llength [array names ::myArray -exact $myKey],这样会更快吗?

这些也是 Nadkarni 在 Tcl 书中列出的可能性。还有其他更有效的想法吗?

感谢您的帮助!

对于数组的特定元素,到目前为止最快的检查方法是使用info exists ::myArray($myKey);它编译成自己的高效实现的字节码操作码(existArrayStk)——可能是一个哈希 table 查找来查找数组实现(可能有缓存适用),以及一个哈希 table查找以获取元素(如果有)。 (有时不限定数组名称会更快;但这取决于上下文。)

array names 命令总是会变慢;如果不出意外,它不是字节码的。虽然在这种情况下它可能能够避免对数组进行线性扫描,但它仍然肯定需要进行列表构造等操作。该代码路径上的成本更高,而且可能永远如此。