如何在AutoHotkey中找到关联数组的长度?

Fle*_* VK 5 associative-array autohotkey

如果在关联数组上使用length()函数,它将返回数组中正在使用的“最大索引”。因此,如果您有任何非整数的键,则length()不会返回数组中元素的实际数量。(这也可能由于其他原因发生。)

有没有更有用的length()版本来查找关联数组的长度?

还是我需要实际循环计算每个元素?我不确定在不事先知道所有可能的键的情况下该怎么做。

Ro *_* Mi 5

如果您有一个平面数组,Array.MaxIndex()则将返回索引中的最大整数。但是,这并不总是最好的,因为AutoHotKey允许您拥有第一个索引不为1的数组,因此MaxIndex()可能会产生误导。

更糟糕的是,如果您的对象是索引可能包含字符串的关联哈希表,MaxIndex()则将返回null。

因此,最好对它们进行计数。

DesiredDroids := object()
DesiredDroids["C3P0"] := "Gold"
DesiredDroids["R2D2"] := "Blue&White"
count :=0
for key, value in DesiredDroids
    count++
MsgBox, % "We're looking for " . count . " droid" . ( count=1 ? "" : "s" ) . "."
Run Code Online (Sandbox Code Playgroud)

输出量

We're looking for 2 droids.
Run Code Online (Sandbox Code Playgroud)