Lua tableテーブル長の下位原理
自分で書こうと思っていたが、うっかり大物の文章を見て、とても詳しくて全面的だった.https://www.jianshu.com/p/1e8ab8fe55e4
疑似コードの概要
新しい要素がある場合は、配列とハッシュバケツのサイズを再割り当てする要因を考慮する必要があります.再割り当てされた配列サイズは50%利用率の原則に従います.
したがって,(1)配列やハッシュバケツ部分をできるだけ1つのテーブルに混用しないこと,すなわち,1つのテーブルに1種類のデータしか格納しないことが望ましい.luaの実現には確かに両者の統一表現の遍歴が提供されているが,これは利用者がこの2つの方式を混用すべきであることを意味するものではない.(2)nil値をできるだけテーブルに格納しないようにすると,長さ取り操作の挙動が不安定になる.(3)この操作のコストが大きいため,このlua解釈器の背後にある動作を予め割り当て,配列部分のみを用いるなどの戦略により回避することで,多くの効率を向上させることができる.
疑似コードの概要
if == nil then
nil
else if ~=nil and == nil then
return
else
local function ()
+1 , ( key )
end
新しい要素がある場合は、配列とハッシュバケツのサイズを再割り当てする要因を考慮する必要があります.再割り当てされた配列サイズは50%利用率の原則に従います.
したがって,(1)配列やハッシュバケツ部分をできるだけ1つのテーブルに混用しないこと,すなわち,1つのテーブルに1種類のデータしか格納しないことが望ましい.luaの実現には確かに両者の統一表現の遍歴が提供されているが,これは利用者がこの2つの方式を混用すべきであることを意味するものではない.(2)nil値をできるだけテーブルに格納しないようにすると,長さ取り操作の挙動が不安定になる.(3)この操作のコストが大きいため,このlua解釈器の背後にある動作を予め割り当て,配列部分のみを用いるなどの戦略により回避することで,多くの効率を向上させることができる.