2012-03-07 14 views
0

ようなので、私は、単純なデータベースとして機能するテキストファイル、二行にまたがる各エントリを有する:どの方法が高速ですか?

name 
number 
bob 
39 
jack 
22 
jill 
85 

が今はアレイ内の各ラインを分離していると言う、私はそれぞれの名前を分析したかったとそれが変数と等しいかどうかを確認してください。これを行うに速く、次のようになります。偶数番号のライン(名)うち

if($variable == $line) { 
    //true 
} 

それとも最初のフィルタを、その後、彼らは、変数に等しいかどうかを確認するためにそれらを分析しますか?あなたがわからない場合、最初の行は基本的にcountの残りを(foreachループ内のすべてが)2で割ったものを見つけ、それが0の場合は偶数です。

if ($count%2 == 0) { 
    if($variable == $line) { 
     //true 
    } 
} 

ありがとうございます。

+0

なぜ偶数番号を取得するのは面倒ですか?そうする目的は何ですか?ちょうどそれらを直接見つける! – Joseph

答えて

1

私は間違いなくいくつかの「に応じて、最初のスタイルで行くだろう"状況。例えば、あなたの平等な行動はどれくらいの期間続くと思いますか?比較している整数や倍数を見た場合、この最初のスタイルは私にとっては個人的にはるかに良いようでした。

モジュロ演算子は私の本では高価な演算です。モジュロ演算を実行する巨大なデータベースを持っている場合、多くの時間がかかるでしょう。あなたは他の方法を使って速くしようとすることができますReferenceこのようなもの。

あなたは上記のコードについて時間を勉強して、あなた自身のタイミング差を見ることを願っています。私は約5百万のデータセットに対してモジュロ演算を使用していた時代に関連するいくつかの重大な問題を抱えていました。

答えの1つに基づいて編集します。

モジュロと最初のケースの代わりに提供された+ = 2演算を使用してください。

0

2番目の方がはるかに高速です。このような処理のためには、計算時間は無視できると仮定し、試行回数はむしろあなたのスピードに大きく影響します。これはプログラムの効率性に関して、ほとんどいつもそうです。特に、単純なチェックと比較すると、2つの文と1つの文のようになります。

0

ifステートメントを2番目のステートメントに組み合わせると、さらに高速化できます。

if($count%2==0 && $variable==$line) { 
} 
+0

私はインタプリタがすでにこのような最適化を行っていると思います(低レベルコードで)。 –

+0

私はそれがしているかどうかわからない。しかし、そうでなければ、スピードアップするでしょう。 – judda

0

私はあなたが

$lines = array('bob', '39', 'jack', '22', 'jill', '85'); 

ような配列を持っていると仮定し、単にあなたのforループ内で奇数ラインをスキップ:

for ($i=0, $len=count($lines); $i<$len; $i+=2) { 
    if ($lines[$i] == $var) { 
     // true 
    } 
} 
関連する問題