2

リストがあるとします:

MyList = new List<MyEntity>();

次に、アイテムをリストに追加しようとします。非同期呼び出しを使用して WCF RIA サービスによって読み込まれた各項目。新しいアイテムが追加された後、MyList を常に MyEntity のプロパティで並べ替えます。たとえば、ID です。

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

2

どちらでも使用できます

Mylist.Sort();

また

MyList.OrderBy();

プロパティを指定するには、おそらく後者の方がよいでしょう。

MyList.OrderBy(x => x.ID);

他の人が言ったように、これは効率的ではなく、SortedSet の方が適していますが、型を変更できない場合は、これが 1 つの可能性です。

于 2012-09-14T18:27:36.710 に答える
2

SortedSetを使用してソートを維持できます

       SortedSet<int> x = new SortedSet<int>();

        x.Add(5);
        x.Add(1);
        x.Add(23);
        x.Add(51);

        foreach (var i in x)
            Console.WriteLine(i);

印刷します

1
5
23
51
于 2012-09-14T18:05:10.630 に答える
1

List<T>はソートされたコンテナではなく、挿入後にsortを呼び出して順序付けを維持することは、それを行うための最良の方法ではありません。代わりに、ツリーベースのコレクションやSortedSet

于 2012-09-14T18:07:38.743 に答える
1

List<Entity> コレクションを使用することが非常に重要な場合は、BinarySearch を使用して位置を特定できます。

int index = MyList.BinarySearch(newMyEntity, yourComparer);
if (index < 0)
    MyList.Insert(~index, newMyEntity);
else
    // An identical item has been found.

yourComparer は IComparer<MyEntity> のインスタンスです。MyEntity が IComparable<MyEntity> インターフェイスを実装している場合は、これを回避できます。

Insert-statement はかなり非効率的であることに注意してください。O(n/2) のようなパフォーマンスを期待してください。

これがあなたの探求に役立つことを願っています。

于 2012-09-14T19:10:59.560 に答える