2012-01-21 9 views
15

私はipの使用がforループと比較して遅いと読んでいます。プログラミング習慣を変えるべきですか?私はルア5.2、ある日、現在5.1を使用しています。私はipairsかforループを使うべきでしょうか?

私の配列は、せいぜい約1000項目です。あなたは、テーブルのハッシュキーを使用している場合は、 - あなたは、順次、数値インデックスを持つテーブルを反復処理している場合

local mytbl = { 'a','b','c','e'} 
for i,v in ipairs(mytbl) do 
    print(i,v) 
end 

for i=1,#mytbl do 
    print(i,mytbl[i]) 
end 

答えて

26

http://springrts.com/wiki/Lua_Performance#TEST_9:_for-loops

pairs: 3.078 (217%) 
ipairs: 3.344 (236%) 
for i=1,x do: 1.422 (100%) 
for i=1,#atable do 1.422 (100%) 
for i=1,atable_length do: 1.562 (110%) 

注意、しかし、数値forループを使用してのみ動作することまたはスパーステーブルの場合は、pairs()という形式を使用する必要があります。

+0

パフォーマンステーブルをありがとう。ほんの数回のループでは二重の時間は実際にはあまりないので、私は現在のコードを変更する必要はありません。しかし、将来のループのために、私は今私が何をする必要があるか知っています。ありがとう! – topskip

+6

すべてのパフォーマンスの考慮事項と同様、すべてがコンテキストに依存します。時期尚早の最適化はすべての悪とそのようなものの根源です。 – Amber

+0

あなたのコメントは読んでください:** "あなたは' pairs() 'を使う必要があります** **' pairs'は 'pairs'と' ipairs'の2つだけです。後者はforループと全く同じです。数値インデックスを '1 'から'#t'にインクリメントすることによって繰り返します。 'for'ループと同じ理由で、あなたの事例では動作しません。 – Mud

関連する問題