2009-08-05 29 views
2

私は.NET 2.0を使用しています 大きな文字列があります。 配列に特定の文字列があるかどうかを確認したい 次のコードが最適化されているか、最適化が必要かどうかはわかりません。 をご覧ください。チェックする方法文字列の配列には特定の文字列が含まれていますか?

string []test_arr= new string[]{"key1","key2","key3"}; 
Boolean testCondition = (new List<string>(test_arr)).Contains("key3"); 

私もことを、任意の適切な参照や本がある.NETが

  • .NET反省
  • 属性.NETジェネリック

    1. についての詳細を知りたいです誰かがすでに私を助けてください!

  • 答えて

    8
    string []test_arr= new string[]{"key1","key2","key3"}; 
    bool testCondition = Array.Exists 
    (
        test_arr, 
        delegate(string s) { return s == "key3";} 
    ); 
    
    +5

    1を使用することを示唆していますが、あなたのデリゲート本体が 'リターンの==「KEY3」でなければなりません;' – LukeH

    +1

    おかげでルーク、メモリから書いていました。私はコードを修正しました。 –

    +0

    おそらくラムダとデリゲートの表記を混ぜたでしょう;)。 – Dykam

    2

    あなたは(静的Array.Sortメソッドを使用して)あなたの配列をソートして、別の方法として、あなたの文字列に対して、より最適化されたデータ構造を使用する必要がArray.BinarySearch

    使用することができ、その場合は可能。

    1

    .NET Frameworkバージョン2.0では、ArrayクラスはSystem.Collections.Generic.IList、System.Collections.Generic.ICollection、およびSystem.Collections.Generic.IEnumerable汎用インターフェイスを実装しています。

    したがって、あなたは、次の操作を行うことができます。

    string[] test_arr = new string[]{"key1","key2","key3"}; 
    Boolean testCondition = ((IList<string>)test_arr).Contains("key3"); 
    
    1

    リストは最大のオーバーヘッドは、おそらくリストの作成になりますあなたのサンプルではO(n)、SortedListのはO(n個のログ)

    1

    ですそれはデモンストレーションの一部かもしれない。

    int x = Array.IndexOf<string>(test_arr, "key3"); 
    bool testCondition = x >= 0; 
    

    しかし、あなたはオプションを持っている場合、最初の場所に保管しておくことがHashSet<string>を使用する方が効率的である:配列から始まっ

    、以下はおそらく速くなります。 HashSetは、O(1)内の要素の存在をチェックできます。

    あなたの他の質問については、彼らはすでに文字列のあなたのラルガ配列abouot「C#の本」と、たとえば、検索オプションを使用し、SOに

    1

    を依頼されている: 全く最適化された方法は、限り、あなたのようにはありません配列を使用する(最初の要素から始めて、見つかるまで、または配列全体を調べるまで) - これは最悪の場合のO(n)時間を与える(O表記は時間を与えるプログラムは何かを達成する必要があります)。

    検索のために最適化したいので、代わりにハッシュテーブルまたはツリーを使用することをお勧めします(データセットの大きさによって異なります)。これはあなたがチェックする必要がある時間を大幅に短縮します

    1

    私の答えはMatt Howellsと非常に似ています。 しかし、私はStringComparison

    
    Array.Exists<string>(stringsArray, 
           delegate(string match) 
           { 
            return match.Equals("key", StringComparison.InvariantCultureIgnoreCase) 
           }); 
    
    関連する問題