根据键自动排序对象的数据结构?

时间:2012-06-07 18:16:15

标签: c#

我想要一个基于相关键自动为我排序数据的结构,但是一旦完成,我就不必使用键抓取任何对象,我只想从列表中取出第一个。在我的具体情况下,每个对象都有一个关联的浮点值,我想从低到高排序。

例如,我希望能够对整数列表进行排序,但是通过它们对应的浮点'键'并抓住索引0处的那个 - (这将是具有最低关联浮点数的那个)

我遇到过orderedDictionary,但我并不完全了解它们,也不知道它们对我的需求是多么合适。我以为它们只是一个允许你索引它们的字典,但它们不是模板类?

2 个答案:

答案 0 :(得分: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

描述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;
    }
}

答案 1 :(得分:0)

你可以使用哈希表http://en.wikipedia.org/wiki/Hash_table,将'key'放在哈希中,并在哈希中搜索元素'key',如果哈希具有你拥有该元素的键。每次添加新元素O(1)时都必须更新,但发现复杂度为O(1)。