2011-01-03 9 views
1

オブジェクト:.NET BinarySearchは()私は、次の特性を持つカスタムオブジェクトのArrayListのを持っている

  • ファイル名
  • ファイルパス
  • CurrentFolder
  • TopLevelFolder

次に、.NETのArrayList内のすべてのオブジェクトのFileNameプロパティでBinarySearch(またはその他のクイック検索)を実行する必要があります。言い換えれば、私はArrayListの中のオブジェクトを、私が探しているのと同じFileNameで見つける必要があります。

ArrayListのBinarySearchの構文は次のとおりです。しかし、あなたはarraylistのオブジェクトのプロパティのためにこれをどうしますか?

public static void FindMyObject(ArrayList myList, Object myObject) { 
    int myIndex=myList.BinarySearch(myObject); 
    if (myIndex < 0) 
     Console.WriteLine("The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex); 
    else 
     Console.WriteLine("The object to search for ({0}) is at index {1}.", myObject, myIndex); 
    } 
+2

'Dictionary 'の代わりに' ArrayList'を使うのはなぜですか? .net 1.xを使用していますか? – CodesInChaos

+0

Dictionaryオブジェクトの利点は何ですか? – Alex

+2

1)O(1)ルックアップと2)コンパイル時の型の安全性。 – CodesInChaos

答えて

2

はるかに適切に聞こえるれ、そこ比較演算(http://msdn.microsoft.com/en-us/library/4ba2bttb.aspxを)かかりAreay.BinarySearchの過負荷があるが、この場合には、私は単純にDictionary<string,YourType>に切り替えます:

  • 速くフェッチ: O(1)
  • ソートされたデータには依存関係を(実際には、すべてのソートの概念)
  • は強く
を入力しました0
+0

に置き換えられましたThanks、Marc。私はもうしばらく離れてから.NETに戻ってきます。辞書は最良の選択と思われます。この場合、どのように検索しますか? – Alex

+1

@Alex - 'var item = dict [key];'、 'dict.TryGetValue(key、out item)'(戻り値が 'true'であることをテストする) –

+0

ありがとう、Marc。私はこれを今実装していて、それがどのように進むのかを教えてくれるでしょう。 – Alex

1

あなたは比較演算子クラスを実装する必要があり、あなたはちょうど私がクラスCを作成したのだ例えばオブジェクトとカスタム検索しないで、特定のクラス型を使用する必要があります。

public class MyComparer : IComparer<C> 
{ 
    #region IComparer<C> Members 

    public int Compare(C x, C y) 
    { 
     return x.filename.CompareTo(y.filename); 
    } 

    #endregion 
} 
public class C 
{ 
     public string filename; 
     public string id; 
} 

し、それを使用する:

List<C> aList = new List<C>(); 
aList.BinarySearch(myCObject, new MyComparer()); 
関連する問題