2

私はビジュアル スタジオ (c#) で SortedList のようなものを見てきました。しかし、私はそれがどのように機能し、どのように使用するかを知りません。通常のリストよりもアクセス時間が速いことを期待して、SortedList を使用したいと考えています。残念ながら、配列は使用できません。簡単な例を見ていただければ幸いです。

編集:オブジェクトクラスがあるとしましょう:

class Point
{
public Point(int a, int b) {x = a; y = b;}
int x;
int y;
}

// x value will not be repeating in a list
Point a1 = new Point(1,2);
Point a2 = new Point(3,5);
Point a3 = new Point(0,2);
Point a4 = new Point(2,7);
Point a5 = new Point(14,2);
Point a6 = new Point(9,10);

SortedList<Point> list = new SortedList<Point>();

list.Add(a1);
list.Add(a2);
list.Add(a3);
list.Add(a4);
list.Add(a5);
list.Add(a6);

これらすべての要素を O(log2n) 時間で追加することは可能ですか? これを追加した後のリストをそのようにしたいと思います。並べ替え後にもう一度並べ替える必要はありません。

(0,2)
(1,2)
(2,7)
(3,5)
(9,10)
(14,2)

そして、(x == 9)のオブジェクトがあるかどうかを確認したいと思います。それは O(log2n) 時間で可能でしょうか?

ありがとう

4

3 に答える 3

7

あなたはこのようにそれを行うことができます、

var list = new SortedList<int, Point>
{
    { 1, new Point(1, 2) },
    { 3, new Point(3, 5) },
    { 0, new Point(0, 2) },
    { 2, new Point(2, 7) },
    { 14, new Point(14, 2) },
    { 10, new Point(9, 10) },
}

MSDNで述べられているように、インラインオブジェクトの初期化はSortedListsにとって特に有益です。

xが3のポイントがあるかどうかを確認するには、次を使用します。

Point x3Point;
if (list.TryGetValue(3, out x3Point))
{
    //x3Point is now set to the Point with an x value of 3.
}

もちろん、2つだけ保存することもできintます

var list = new SortedList<int, int>
{
    { 1, 2 },
    { 3, 5 },
    { 0, 2 },
    { 2, 7 },
    { 14, 2 },
    { 10, 10 },
}

このように使用できます

int yValue;
if (list.TryGetValue(3, out yValue))
{
    var x3Point = new Point(3, yValue);
}

理想的には、事前に並べ替えられたデータを使用してリストを初期化します。

于 2013-01-14T17:31:54.380 に答える
1

LINQ マッピング クエリを介してSortedListを作成できます。以下に例を示します。SortedList は基本的に、キーと値の項目を持つソートされたハッシュテーブル ( SortedListimplements ) であることに注意してください。IDictionaryしたがって、int の配列から等しいキーと値を選択します。

var ints = new []{1,54,65,76,34,36};
SortedList sorted =  new SortedList(ints.ToDictionary(key => key, val => val));
于 2013-01-14T17:13:47.313 に答える
1

MSDN から直接:

キーでソートされ、キーとインデックスでアクセスできるキーと値のペアのコレクションを表します。

したがって、もちろん、値を常に特定の基準でソートしておく必要がある場合に便利な List タイプです。さらなる例と説明については、このリンクをご覧ください。

于 2013-01-14T17:12:10.303 に答える