2017-03-20 12 views
1

これは、さまざまな言語の新しいプログラマーからの多くの質問に見られる論理的なエラーの一般的な質問と回答です。アレイレポートが見つからなくても「見つかりません」が見つかりました

問題は、入力条件に一致する要素の配列を検索することです。

for each element of Array: 
    if element matches criteria: 
     do something with element 
     maybe break out of loop (if only interested in first match) 
    else: 
     print "Not found" 

このコードは、正常に一致する要素を見つけた場合でも、「見つかりません」レポート:このアルゴリズムは、擬似コードで、次のようになります。

答えて

4

問題は、配列を何か直線的に探しているときに、配列の最後に到達するまで見つからないことがわかりません。たとえ他の一致する要素があっても、不一致の要素すべてについて、問題のコードは「見つからない」と報告します。

単純な変更は、何かを見つけたかどうかを追跡する変数を使用して、ループの最後にこの変数をチェックすることです。

found = false 
for each element of Array: 
    if element matches criteria: 
     do something with element 
     found = true 
     maybe break out of loop (if only interested in first match) 

if not found: 
    print "Not found" 

一部の言語には、独自のループを作成する代わりに使用できる組み込みのメカニズムがあります。

  • いくつかの言語は、コールバック関数をとり、それが配列の任意の要素に成功したかどうかを示すブール値を返しanyまたはsome機能を有しています。
  • 言語に配列フィルタリング機能がある場合は、入力配列を条件をチェックする関数でフィルタリングし、結果が空の配列であるかどうかを確認できます。
  • 要素を正確に一致させる場合、ほとんどの言語で一致する要素を検索するfindまたはindex関数が用意されています。

頻繁に検索する場合は、配列をより効率的に検索できるデータ構造に変換する方がよい場合があります。ほとんどの言語は、setおよび/またはhash tableというデータ構造を提供しています(後者は、連想配列、マップ、辞書などの言語に応じて多くの名前になります)。これらは一般的にO(1)時間で検索できます。 n)。

関連する問題