![](/img/trans.png)
[英]Does there exist a clean way to convert a lua table (as a string) to a javascript array? (and visa versa)
[英]Lua's hybrid array and hash table; does it exist anywhere else?
這個想法與Roberto Ierusalimschy以及Lua團隊的其他成員原創。 我聽說羅伯托在2003年麻省理工學院輕量級語言研討會上就此進行了討論,在這次演講中,他討論了以前的工作並且令人信服地認為這個想法是新的。 我不知道其他語言是否已經復制過它。
最初的Awk語言模型比Lua更受限制; 數字或字符串可以用作數組中的鍵,但數組本身不是第一類值:數組必須具有名稱,並且數組不能用作數組中的鍵。
關於實現,我檢查了由Brian Kernighan維護的原始Awk的源代碼,並且Awk的實現使用哈希表,而不是Lua的混合數組/表結構。 區別很重要,因為在Lua中,當表與連續的整數鍵一起使用時,空間開銷與C數組相同。 原始的Awk 不是這樣。
我沒有費心去調查awk的所有后續實現,例如Gnu Awk,mawk等等。
編輯: 這不回答關於實施的問題。
AWK也做到了。
它正在考慮一些語言如何混淆其他語言不同的操作:
a[10]
a['foo']
a.foo
a('foo')
/ a.foo()
很不完整的例子:
Perl是一種罕見的語言,其中順序/關聯索引具有單獨的語法 - a[10]
/ a{'foo'}
。 AFAIK,對象字段映射到其他操作之一,具體取決於類所使用的實現者。
在Python中,所有4個都是不同的; 順序/關聯索引使用相同的語法,但為它們優化了單獨的數據類型。
在Ruby中,對象字段是沒有參數的方法 - a.foo
。
在JavaScript中,對象字段a.foo
是用於關聯索引a['foo']
語法糖。
在Lua和AWK中,關聯數組也用於順序索引 - a[10]
。
在Arc中 ,順序和關聯索引看起來像函數調用 - (a 10)
/ (a "foo")
,我認為a.foo
也是這個語法的糖(?)。
我能想到的最接近的是Javascript - 你用new Array()
創建一個數組,然后按數字或字符串值繼續索引。 出於性能原因,一些Javascript實現可能會選擇使用兩個數組,原因是您鏈接到的Lua文檔中提到的原因。
ArrayWithHash是C ++中數組哈希表混合的快速實現。
由於C ++是靜態類型語言,因此ArrayWithHash中只允許使用整數鍵(無法插入字符串或指針鍵)。 換句話說,它類似於具有大型索引的哈希表備份的數組。 它還使用不同的哈希表實現,這比Lua表實現的內存效率低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.