關于lua表更純粹一些 性能會有所提升 全數組 或者全key表

原文: http://www.codedump.info/?p=296

function print_ipairs(t)
  print("in print_ipairs")
  for k, v in ipairs(t) do
    print(k)
  end
end 

function print_pairs(t)
  print("in print_pairs")
  for k, v in pairs(t) do
    print(k)
  end
end 

a = {}
a={1,2,3,4,5,6,7,8,9,10}
print_ipairs(a)
a[2] = nil
a[3] = nil
a[4] = nil
a[6] = nil
a["k"] = "e"
print_ipairs(a)
print_pairs(a)

輸出為:

in print_ipairs
1
2
3
4
5
6
7
8
9
10
in print_ipairs
1
in print_pairs
1
7
8
10
k
5
9
在這里,首先對表a賦值,有1-10共十個元素,通過調用函數print_ipairs可知,這些元素都是存放在數組部分的,這是因為ipairs取的是Table的數組部分元素.
在這之后,人為的將其中2,3,4,6元素刪除,造成原來數組不滿一半元素被利用上的現象,然后再插入一個新key "k",以讓這個Table重新分配空間.再此之后,再次調用ipairs遍歷a的數組部分,可以看到只有1被打印出來了,也就是說,在重新分配空間之后,除去已經被刪除的2,3,4,6之外,只有1還在數組里面,剩下的5,7,8,9,10已經不在數組部分了.緊接著調用pairs遍歷這個表,可以看出這些已經不在數組部分的值又被打印出來了,并且它們的順序已經被打亂,不再按照數字大小順序來排列了,它們在這次重新分配中被挪動到了hash部分.

這個實驗既驗證了我們前面的分析,同時也告訴我們,Table的重新分配,實際上代價是很大的,因此不建議在實際程序中,一個Table即有數組部分,也有Hash部分,純粹一些,性能上會有提升.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,526評論 0 3
  • 早安!今后的大半個月,我又要走在路上了。讓我慶幸的是,我不但為了謀生,亦為了謀愛。 ps:圖片來自朋友。
    老藏漂小康閱讀 300評論 0 1
  • 第二章 相遇與“重逢” 1 假期的第三天晚上...
    艾倫潘閱讀 333評論 0 1
  • 作為ibireme童鞋的仰慕者....相信大家都灰常了解他的YYModel,在這里作為渣渣的我就把YYModel那...
    philiha閱讀 1,343評論 0 50