.NET 4.0で並行コレクションをソートする方法 たとえば、ConcurrentBagコレクションを構築しました。どのようにして要素をソートできますか?.NET 4.0で並行コレクションをソートする方法
ConcurrentBag<string> stringCollection;
ConcurrentBag<CustomType> customCollection;
.NET 4.0で並行コレクションをソートする方法 たとえば、ConcurrentBagコレクションを構築しました。どのようにして要素をソートできますか?.NET 4.0で並行コレクションをソートする方法
ConcurrentBag<string> stringCollection;
ConcurrentBag<CustomType> customCollection;
あなたがリンク
http://msdn.microsoft.com/en-us/library/dd460719.aspx以下のより多くの情報のチェックに
var result = stringCollection.AsParallel().AsOrdered();
..
をソートするためOrderBy
メソッドを使用して、あまりにもこれを試すことができ、あなたは何をするかに傾くことができますPLINQ
を使用した複雑なソート、例:
var q2 = orders.AsParallel()
.Where(o => o.OrderDate < DateTime.Parse("07/04/1997"))
.Select(o => o)
.OrderBy(o => o.CustomerID) // Preserve original ordering for Take operation.
.Take(20)
.AsUnordered() // Remove ordering constraint to make join faster.
.Join(
orderDetails.AsParallel(),
ord => ord.OrderID,
od => od.OrderID,
(ord, od) =>
new
{
ID = ord.OrderID,
Customer = ord.CustomerID,
Product = od.ProductID
}
)
.OrderBy(i => i.Product); // Apply new ordering to final result sequence.
ただし、オブジェクトはコンカレント・コレクションに残ります。最も古いアイテムを削除するにはどうすればよいですか? – Kim
は次のように、リストを並べ替え、コレクションからリストを取得します:DSWの答えに展開する
ConcurrentBag<string> bag = new ConcurrentBag<string>();
var temp = bag.ToList();
temp.Sort();//you can apply a custom sort delegate here
bag = new ConcurrentBag<string>(temp);
、あなたが列挙上のOrderByを使用することができます。
customCollection.OrderBy(cc => cc.FieldToOrderBy);
また降順でそれを行うことができます。
customCollection.OrderByDescending(cc => cc.FieldToOrderBy);
ソート中に別のスレッドによってコレクションが変更される可能性がありますか?またはOrderByは新しいリストを作成します –
OrderByはただ新しいIEnumerableをソートします。基本となるデータ構造は変更されません。 –
あなたはPLINQを使用するか、またはあなたはこの記事内の1つのように、独自の並列ソート機能を実装して書くことができますhttp://www.emadomara.com/2011/08/parallel-merge-sort-using-barrier.html
はあなたを行いますある時点ですべての要素を含む新しいソートされたコレクションが必要な場合、またはその順序でソートされたり、ソートされたりしたい場合などです。 – alun
メソッドを使用してソートしたいのですが、ソートを行うためにLINQを使用する必要があります。 –