リストがあるとします:
MyList = new List<MyEntity>();
次に、アイテムをリストに追加しようとします。非同期呼び出しを使用して WCF RIA サービスによって読み込まれた各項目。新しいアイテムが追加された後、MyList を常に MyEntity のプロパティで並べ替えます。たとえば、ID です。
この問題を解決するにはどうすればよいですか?
リストがあるとします:
MyList = new List<MyEntity>();
次に、アイテムをリストに追加しようとします。非同期呼び出しを使用して WCF RIA サービスによって読み込まれた各項目。新しいアイテムが追加された後、MyList を常に MyEntity のプロパティで並べ替えます。たとえば、ID です。
この問題を解決するにはどうすればよいですか?
どちらでも使用できます
Mylist.Sort();
また
MyList.OrderBy();
プロパティを指定するには、おそらく後者の方がよいでしょう。
MyList.OrderBy(x => x.ID);
他の人が言ったように、これは効率的ではなく、SortedSet の方が適していますが、型を変更できない場合は、これが 1 つの可能性です。
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
List<T>
はソートされたコンテナではなく、挿入後にsortを呼び出して順序付けを維持することは、それを行うための最良の方法ではありません。代わりに、ツリーベースのコレクションやSortedSet
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) のようなパフォーマンスを期待してください。
これがあなたの探求に役立つことを願っています。