9

.NET 4.0 で並行コレクションを並べ替える方法 たとえば、ConcurrentBag コレクションを作成しました。その中の要素をどのように並べ替えることができますか?

ConcurrentBag<string> stringCollection;

ConcurrentBag<CustomType> customCollection;
4

4 に答える 4

8

DSW の回答を拡張するには、列挙可能な OrderBy を使用できます。

customCollection.OrderBy(cc => cc.FieldToOrderBy);

降順で行うこともできます。

customCollection.OrderByDescending(cc => cc.FieldToOrderBy);
于 2011-08-09T04:23:10.050 に答える
6

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.
于 2011-08-09T04:18:33.767 に答える
1

PLINQ を使用するか、この記事http://www.emadomara.com/2011/08/parallel-merge-sort-using-barrier.htmlのような独自の並列並べ替え関数を実装することができます。

于 2011-08-12T07:30:50.853 に答える
0

コレクションからリストを取得し、次のようにリストを並べ替えます。

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);
于 2011-08-09T04:22:33.890 に答える