2010-01-16 14 views
11

Sıralanmamış dizelerim var. Bu öğeleri bir dizide, Listede, Sıralı Listede, her neyse yerleştirebilirim.Listede bir öğeyi bulmanın en hızlı yolu?

Bu listedeki bir dize bakmanın en hızlı yolunu bulmalıyım. Listeyi bir diziye dökmekten, sıralamaktan ve sonra ikili aramayı uygulamaktan daha iyi olur muyum? Ya da çerçeve bunu yapmanın bir yolunu sunuyor mu?

Teşekkürler

P.S. .NET 2.0'a karşı VS2008'i kullanma

cevap

20

Hedefiniz bir dizideki ipleri bulmak için çok hızlı bir hale getirmekse, bunları bir HashSet ürününe yerleştirin.

HashSet.Contains bir O (1) yöntemidir ve dizeler varsayılan olarak iyi bir karma algoritmaya sahiptir, bu nedenle bundan daha hızlı bir rutin yapmak zor olacaktır.


Düzenleme:

Eğer .NET 2 kullandığınız için, ben sadece Dictionary<string,string> yapmak ve anahtar ve değer için aynı dizeyi kullanabilirsiniz. Dictinoary<TKey,TValue>.Contains da O (1), ve denediğiniz liste tabanlı aramadan çok daha hızlı olacaktır.

+0

Özür dilerim - Etiketleri güncelledim. .NET 2.0 ile VS2008 kullanıyorum - HashSets kullanılabilir değil. – AngryHacker

+0

Yani 'Hashtable' –

+0

kullanın. Net gerçekten HashSet'e eşdeğer değil mi? –

2

Sadece bir nesneyi bulmanız gerekiyorsa, bir kez, sadece başlangıçta başlayın ve onu bulana kadar her birine bakın. Bu bul işlemini aynı listeye birden çok kez tekrarlamanız gerekiyorsa, farklı öğeleri bulmak için sıralı listeyi saklayın ve bir ikili arama yapın ...

-1

Bunun olup olmayacağından emin değilim. Sizin için herhangi bir kullanım, ama bu, bunun tam olarak "hız" üzerinde emin değil, bunu yapmak için oldukça basit bir yol olurdu.

List<string> collection = new List<string>(); 

collection.Sort(); 

foreach(string value in collection) 
{ 
    if(value == "stringToLookFor") 
    { 
     return value; 
    } 
{ 
+2

Yine de bunun içinden geçecek olursanız, neden onu ayırın? – AngryHacker

+0

Bu, muhtemelen listeyi aramada en yavaş yoldur. Sıralama yaptıysanız, anahtar/değer tabanlı bir koleksiyondaki aramadan çok daha hızlı ancak daha yavaş olacak bir BinarySearch gerçekleştirebilirsiniz. –

+2

Sadece sıralama listesinin başlangıcında, rastgele yer dizgilerine bakmaktan daha hızlı arama yapmaktan sıyrılmayı düşündüm. Sadece bir öneriydi ve hiçbir şekilde tek çözüm değildi. –