2010-04-11 26 views
5

SortedDictionary<int, double> gibi davranan ancak anahtarlar yerine değerlere göre sıralanmış bir veri yapısına ihtiyacım var. Sözlüğümde yaklaşık 3000 öğeye sahip olduğumuzda öğelerin eklenmesi ve kaldırılması için yaklaşık 1-2 mikrosaniye gerekiyor..NET SortedDictionary Ama Değerlere Göre Sıralama

İlk düşüncem sadece kodumdaki anahtar ve değerleri değiştirmekti. Bu neredeyse işe yarıyor. Bunu yaparak testlerimde elementleri yaklaşık 1,2 mikrosaniye ekleyebilir ve kaldırabilirim.

Ancak, anahtarların SortedDictionary içinde benzersiz olması gerekir; bu, ters sözlüğümdeki değerlerin benzersiz olması gerektiği anlamına gelir. Ve olmayabilecekleri bazı durumlar var.

.NET kitaplıklarındaki herhangi bir fikir zaten benim için işe yarayacak?

+0

<> bu performansı uymayan? –

+0

Anahtar ve değerlerin etki alanınızda ne olduğunu açıklayabilir misiniz? –

+0

@Simon SortedList <>'ın da tuşlara göre sıralı olduğunu düşünüyorum. http://msdn.microsoft.com/en-us/library/system.collections.sortedlist.aspx –

cevap

1

PowerCollections kitaplığı, adı verilen bir sınıfa sahiptir ve temel olarak bir SortedDictionary<TKey, TValue> gibidir, ancak kopyalara izin verir. Bir anahtarı aradığınızda, tek bir değer yerine sayılabilir.

Kitaplık ücretsizdir ve bu sınıfla tam olarak istediğiniz şeyi yapabilmeniz gerekir - değerleri anahtar olarak saklayın.

Böyle değerine göre SortedDictionary sıralayabilir
+0

Vay, bu harika! 1-2 bize gerçek çabukluk yapıp yapamayacağımı göreyim. –

+0

Not: Eğer bu kütüphaneyi kullanmak istemezseniz, bunu her zaman bir 'SortedDictionary' ile uygulayabilir ve' ''' tek bir' T' yerine değer olarak kaydedebilirsiniz. – Aaronaught

+0

Ekle/Kaldır, PowerCollections kitaplığı için yaklaşık 30 mikrosaniyedir. Oldukça yakın, ama bu uygulama için yeterli olup olmadığından emin değilim. İşaretçi için teşekkürler. SortedDictionary <çift, Liste > da iyi bir fikir, eğer bunu zamanlayabilir miyim göreyim. Diğer bir düşüncem, SortedDictionary 'u kullanmak için minik rastgele bir sıra .0000001 eklemek ya da değerlerimi benzersiz kılacak ama sonucu etkilemeyecek. –

3

: Ben SortedList varsayıyorum

yourList.Sort(
    delegate(KeyValuePair<int, double> val1, 
    KeyValuePair<int, double> val2) 
    { 
     return val1.Value.CompareTo(val2.Value); 
    } 
); 
+0

Yenilikçi. Bunu sevdim. – Armstrongest

İlgili konular