2012-06-07 86 views
0

我希望一個結構能夠根據關聯的關鍵字爲我自動排序數據,但是一旦完成,我就不必使用關鍵字來抓取任何對象,我只想從列表中取出第一個對象。在我的具體情況下,每個對象都有一個相關的浮點值,我想從低到高排序。基於密鑰自動排序對象的數據結構?

例如,我希望能夠進行排序整數列表,但其對應的浮動「鑰匙」,抓住一個索引0 - (這將是一個具有最低關聯的浮動)

我遇到了orderedDictionary的,但我不完全理解他們,不知道他們對我的需求是否恰當。我以爲他們只是一本可以讓你編入索引的字典,但它們不是模板類?

+0

一旦它被填充一次,你會添加新的項目到列表嗎? –

+3

你對SortedList和OrderedDictionary有什麼不瞭解?你沒有完全解釋你的用例。 – Oded

+0

所以,如果你有一堆對,你想通過浮點排序,但也有int快速訪問,對吧? – SirPentor

回答

3

你可能想如果SortedSet: http://msdn.microsoft.com/en-us/library/dd412070.aspx

如果你沒有使用.NET 4.0,其在PowerCollection項目可供選擇: http://powercollections.codeplex.com/

例與.Net4.0的SortedSet

SortedSet<float> set = new SortedSet<float>(); 
set.Add(13.3f); 
set.Add(0.5f); 
set.Add(5.5f); 

Console.WriteLine(string.Format("Minimum Value: {0}", set.Min)); // prints 0.5 
Console.WriteLine(string.Format("Maximum Value: {0}", set.Max)); // prints 13.3 

foreach (float f in set) 
{ 
    Console.WriteLine(f); 
} 
// prints: 
// 0.5 
// 5.5 
// 13.3 

// using custom IComparer<float>, see implementation below 
set = new SortedSet<float>(new FloatDescComparere()); 

set.Add(13.3f); 
set.Add(0.5f); 
set.Add(5.5f); 

Console.WriteLine(string.Format("Minimum Value: {0}", set.Min)); // prints 13.3 
Console.WriteLine(string.Format("Maximum Value: {0}", set.Max)); // prints 0.5 

foreach (float f in set) 
{ 
    Console.WriteLine(f); 
} 
// prints: 
// 13.3 
// 5.5 
// 0.5 

Desc IComparer:

private class FloatDescComparere : IComparer<float> 
{ 
    public int Compare(float x, float y) 
    { 
     if (y > x) 
      return 1; 
     else if (x > y) 
      return -1; 
     else 
      return 0; 
    } 
} 
+0

你能解釋一下他們是什麼嗎? – SirYakalot

+0

我添加了一個關於如何使用.NET4.0中的SortedSet的例子。 –

0

您可以使用散列表http://en.wikipedia.org/wiki/Hash_table,在散列中放置'key'並在散列中搜索元素的'key',如果散列具有該元素的關鍵字。每次添加新元素O(1)時都必須進行更新,但您的查找複雜度爲O(1)。

+0

哈希表是未排序的。 – Magnus

+0

我完全忘記了他想被排序,我只是爲了尋找部分而回答。然後,只需對元素進行排序並應用散列。 – Mark