> HOME > スクリプト > StringとListの処理速度比較

StringとListの処理速度比較

2014年03月06日

StringとListの処理速度比較

文字列とListの処理速度比較

ゲームなどを作っていると画面のマスの状態を保存して書き変えていく必要があります。

以前に紹介した3目並べの記事でもリストを使って保存していました。

// "-" は空きマス "0"が○ "1"が×
list a = ["-","-","-","0","-","1","-","1","0"];

の様な感じですね。

保存形式はいくつかあるのですが、ぱっと思いつく3種類を比較してみたいと思います。

① string形式でリストに保管
list a = ["0","1","2","3","4","5","6","7","8","9"];

② integer形式でリストに保管
list a = [0,1,2,3,4,5,6,7,8,9];

③ stringで文字列として保管
string a = "abcdefghi";

////////検証スタート///////////

このリスト達の中から1つの文字を抜き出してその文字を消し
また同じ文字を挿入する処理を1万回繰り返した処理時間を計って見ようと思います。

抜き出す文字は5番目の文字(数字)とします。

① string形式でリストに保管
list a = ["0","1","2","3","4","5","6","7","8","9"];
 
default
{
touch_start(integer total_number)
{
llResetTime();
integer i;
for(i=0; i<10000; i++)
{
integer index = llListFindList(a,["4"]);
if(index != -1)
{
a = llDeleteSubList(a,index,index);
a = llListInsertList(a,["4"],index);
}
}
float time = llGetTime();
llOwnerSay((string)time+"sec");
}
}

② integer形式でリストに保管
list a = [0,1,2,3,4,5,6,7,8,9];
 
default
{
touch_start(integer total_number)
{
llResetTime();
integer i;
for(i=0; i<10000; i++)
{
integer index = llListFindList(a,[4]);
if(index != -1)
{
a = llDeleteSubList(a,index,index);
a = llListInsertList(a,[4],index);
}
}
float time = llGetTime();
llOwnerSay((string)time+"sec");
}
}

③ stringで文字列として保管
string a = "abcdefghi";
default
{
touch_start(integer total_number)
{
llResetTime();
integer i;
for(i=0; i<10000; i++)
{
integer index = llSubStringIndex(a,"e");
if(index != -1)
{
a = llDeleteSubString(a,index,index);
a = llInsertString(a,index,"e");
}
}
float time = llGetTime();
llOwnerSay((string)time+"sec");
}
}

それぞれ5回ずつやり平均を出して見ました。

    ①list(string) ②list(string) ③string

 [1]  5.177763   5.810026   30.506970
 [2]  5.499942   5.264053   30.015890
 [3]  4.933554   5.800610   29.890210
 [4]  5.394611   5.332576   30.323270
 [5]  5.111279   5.769101   30.303750
[平均] 5.223429   5.595271   30.208018

このような結果になりました。
僕は他の言語をよく知らないのでわからないのですが、多分他の言語では完全に反対になる事が多いのではないでしょうか?

llSubStringIndex()よりもllListFindList()の方は早くてさらにinteger形式で保存するよりもstringの方が早い。

しかも文字列とリストではここまでの差が開く。

僕の最初の予想とはかなり違っていたためブログにして見ましたが他のスクリプターの方はどうでしょうか?

こうしたらもっと早いよ!とかこれは違う!というご意見ありましたらIMかコメントで教えて下さいー!!




Posted by TOMOZOO_Lomu at 23:25│Comments(1)スクリプト

タグ :スクリプト

同じカテゴリー(スクリプト)の記事画像
NEW FREE SCRIPT
LSLコード色付け
さんもく並べ スクリプト解説
同じカテゴリー(スクリプト)の記事
 NEW FREE SCRIPT (2014-04-07 00:57)
 LSLコード色付け (2014-01-08 19:45)
 さんもく並べ スクリプト解説 (2014-01-07 23:29)
Comments
アンマリ桁が増えると嫌だけど、
10桁ぐらいならビット演算だったらどうなの?
Posted by すいか at 2014年03月10日 20:54
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。