0

関連付けられたキーに基づいてデータを自動的に並べ替える構造が必要ですが、これが完了すると、キーを持つオブジェクトを取得する必要がなくなり、リストから最初のオブジェクトを削除したいだけです。私の特定のケースでは、各オブジェクトに浮動小数点値が関連付けられており、それらを低いものから高いものに並べたいと考えています。

たとえば、整数のリストをソートできるようにしたいのですが、対応するフロートの「キー」によって、インデックス0のものを取得します-(関連するフロートが最も低いものになります)

私はorderedDictionaryに出くわしましたが、それらを完全には理解しておらず、それらが私のニーズにどれほど適しているかわかりません。それらは索引付けもできる単なる辞書だと思っていましたが、テンプレートクラスではありませんか?

4

2 に答える 2

3

おそらくSortedSetが必要です:http: //msdn.microsoft.com/en-us/library/dd412070.aspx

.net 4.0を使用していない場合は、PowerCollectionプロジェクトで入手できます:http: //powercollections.codeplex.com/

.Net4.0SortedSetの例

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;
    }
}
于 2012-06-07T18:22:35.980 に答える
0

ハッシュテーブルhttp://en.wikipedia.org/wiki/Hash_tableを使用して、ハッシュに「キー」を入れ、ハッシュで要素「キー」を検索できます。ハッシュにその要素があるキーがある場合は、 。新しい要素O(1)を追加するたびに更新する必要がありますが、O(1)の複雑さも見つかります。

于 2012-06-07T18:22:56.457 に答える