expl3 有数组吗?

expl3 有数组吗?

可以\seq_item:Nn从序列中获取任意项。据我所知,这是通过迭代序列项并丢弃直到找到请求的项来实现的,这似乎不是很高效。

有没有一种数据结构expl3更像数组,可以直接访问单个元素?以前,expl3可以通过为每个“数组项”定义宏来实现这一点,例如

\expandafter\def\csname \arrayname \itemnumber\endcsname{\arrayelement}

翻译成语法并不是很难expl3,但也许它已经存在了?

答案1

目前,expl3提供prop用于键值类型寻址的数据类型

\prop_put:Nnn \l_tmpa_prop { a } { data-for-a }
\tl_set:Nx \l_tmpa_tl { \prop_get:Nn  \l_tmpa_prop { a } } 
\tl_show:N \l_tmpa_tl % "data-for-a"

目前,这也是使用单个底层宏实现的,因此可扩展的提取必须遍历内容。不可扩展的访问器函数可用,并且速度更快

\prop_get:NnN  \l_tmpa_prop { a } \l_tmpa_tl

团队在这里讨论了替代实现。正如您所注意到的,对于随机访问,基于哈希表的方法更快。但是,这样做的代价是执行映射(需要链接列表实现)和复制数据类型(然后需要映射)的问题。

我们正在考虑提供一种通用的对象数据类型,然后可以由(低级)模块作者进行扩展。但是,目前如果您需要针对随机访问进行优化的数据结构,则需要自行构建。

相关内容