Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 卢阿';s混合数组和哈希表;它存在于其他地方吗?_Arrays_Data Structures_Hash_Lua_Lua Table - Fatal编程技术网

Arrays 卢阿';s混合数组和哈希表;它存在于其他地方吗?

Arrays 卢阿';s混合数组和哈希表;它存在于其他地方吗?,arrays,data-structures,hash,lua,lua-table,Arrays,Data Structures,Hash,Lua,Lua Table,Lua的表实现将其元素分为两部分:数组部分和哈希部分 其他语言中有这样的东西吗 请参阅中的第4节表格 我能想到的最接近Javascript的东西是—使用新建数组()创建一个数组,然后继续按数字或字符串值进行索引。这很可能是出于性能原因,一些Javascript实现选择使用两个数组,原因在您链接到的Lua文档中有说明。编辑:这并没有回答关于实现的问题。 我也这么做了 有趣的是,有些语言如何将其他语言中不同的操作合并在一起: 列表索引-a[10] 关联索引-a['foo'] 对象字段访问-a.fo

Lua的表实现将其元素分为两部分:数组部分和哈希部分

其他语言中有这样的东西吗

请参阅中的第4节表格


我能想到的最接近Javascript的东西是—使用
新建数组()
创建一个数组,然后继续按数字或字符串值进行索引。这很可能是出于性能原因,一些Javascript实现选择使用两个数组,原因在您链接到的Lua文档中有说明。

编辑:这并没有回答关于实现的问题。

我也这么做了

有趣的是,有些语言如何将其他语言中不同的操作合并在一起:

  • 列表索引-
    a[10]
  • 关联索引-
    a['foo']
  • 对象字段访问-
    a.foo
  • 函数/方法调用-
    a('foo')
    /
    a.foo()
非常不完整的例子:

  • Perl是一种罕见的语言,其中顺序/关联索引具有单独的语法-
    a[10]
    /
    a{'foo'}
    。好的,对象字段映射到其他操作之一,这取决于类的实现者想要使用的操作

  • 在Python中,所有4个都是不同的;顺序/关联索引使用相同的语法,但为它们优化了单独的数据类型

  • 在Ruby中,对象字段是没有参数的方法-
    a.foo

  • 在JavaScript中,对象字段
    a.foo
    是关联索引
    a['foo']
    的语法糖

  • 在Lua和AWK中,关联数组也用于顺序索引-
    a[10]

  • 在中,顺序和关联索引看起来像函数调用-
    (a10)
    /
    (a“foo”)
    ,我认为
    a.foo
    也是语法糖


这个想法最初是由Roberto Ierusalimschy和Lua团队的其他成员提出的。2003年,我在麻省理工学院轻量级语言研讨会上听到Roberto对此进行了一次演讲,在这次演讲中,他讨论了之前的工作,并令人信服地论证了这个想法是新的。我不知道从那以后是否有其他语言复制了它

原始Awk的语言模型比Lua的限制性更强;数字或字符串可以用作数组中的键,但数组本身不是一级值:数组必须有名称,数组不能用作数组中的键

关于实现,我检查了Brian Kernighan维护的原始Awk的源代码,Awk的实现使用哈希表,而不是Lua的混合数组/表结构。这种区别很重要,因为在Lua中,当一个表与连续整数键一起使用时,空间开销与C数组相同。对于原始Awk,情况并非如此

<> P> >我不想研究AWK的所有后续实现,例如GNU AWK、MAWK等。

< P>是C++中数组HabSt++Py>的快速实现。
<>因为C++是静态类型的语言,所以在ArayHuthHASH中只允许使用整数键(没有插入字符串或指针键的方法)。换句话说,它类似于一个具有哈希表备份的数组,用于大索引。此外,它还使用不同的哈希表实现,这比Lua表实现的内存效率低。

Fortress和Clojure还将映射视为键的函数,将数组视为索引的函数。问题在于实现,而不是语言模型。原来的awk仍然由Brian Kernighan维护,它使用了一个哈希表。你是对的,我完全没有注意到!我不能投我的反对票,所以对你的答案+1。