.NET 4.0 で並行コレクションを並べ替える方法 たとえば、ConcurrentBag コレクションを作成しました。その中の要素をどのように並べ替えることができますか?
ConcurrentBag<string> stringCollection;
ConcurrentBag<CustomType> customCollection;
.NET 4.0 で並行コレクションを並べ替える方法 たとえば、ConcurrentBag コレクションを作成しました。その中の要素をどのように並べ替えることができますか?
ConcurrentBag<string> stringCollection;
ConcurrentBag<CustomType> customCollection;
DSW の回答を拡張するには、列挙可能な OrderBy を使用できます。
customCollection.OrderBy(cc => cc.FieldToOrderBy);
降順で行うこともできます。
customCollection.OrderByDescending(cc => cc.FieldToOrderBy);
OrderBy
メソッドを使用してソートできます
また、これも試してみてください..
var result = stringCollection.AsParallel().AsOrdered();
詳細については、以下のリンクを確認してください
http://msdn.microsoft.com/en-us/library/dd460719.aspxを使用すると、複雑な並べ替えを行う方法を学習できます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.
PLINQ を使用するか、この記事http://www.emadomara.com/2011/08/parallel-merge-sort-using-barrier.htmlのような独自の並列並べ替え関数を実装することができます。
コレクションからリストを取得し、次のようにリストを並べ替えます。
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);