2011-08-09 19 views
5

में एक समवर्ती संग्रह को सॉर्ट करने के लिए कैसे करें .NET 4.0 में एक समवर्ती संग्रह को सॉर्ट करने के लिए उदाहरण के लिए मैंने अपने ConcurrentBag संग्रह का निर्माण किया है। मैं इसमें तत्वों को कैसे क्रमबद्ध कर सकता हूं?.NET 4.0

ConcurrentBag<string> stringCollection; 

ConcurrentBag<CustomType> customCollection; 
+2

आप क्या इसका मतलब है कि आप किसी भी समय सभी तत्वों के साथ एक नया क्रमबद्ध संग्रह चाहते हैं या क्या आप इसे हर समय क्रमबद्ध करना चाहते हैं और उस क्रम में या उस प्रभाव से कुछ आकर्षित करना चाहते हैं? – alun

+0

मैं इसे एक विधि का उपयोग करके सॉर्ट करना चाहता था लेकिन ऐसा कोई नहीं है इसलिए मुझे सॉर्टिंग करने के लिए LINQ का उपयोग करना होगा। –

उत्तर

2

आप लिंक

http://msdn.microsoft.com/en-us/library/dd460719.aspx नीचे अधिक जानकारी जांच के लिए

छँटाई के लिए OrderBy विधि का उपयोग कर सकते हैं और यह भी इस कोशिश ..

var result = stringCollection.AsParallel().AsOrdered(); 

, आप कैसे करना है दुबला कर सकते हैं 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. 
+0

लेकिन ऑब्जेक्ट समवर्ती संग्रह में रहते हैं। मैं सबसे पुरानी वस्तुओं को कैसे हटा सकता हूं? – Kim

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); 
+0

मैन, यह करने का एक महंगा तरीका है! – tzup

+1

हाँ मुझे ऐसा लगता है, मैंने अभी एक वैकल्पिक समाधान जोड़ा है, क्या आपको लगता है कि इसे हटाया जाना चाहिए? –

+0

पृष्ठ को रीफ्रेश करने के बाद भी आपका वैकल्पिक समाधान नहीं देख सकता। वैसे भी, यह आप पर निर्भर है, लेकिन मैं इस जवाब को छोड़ दूंगा। ऐसा मत सोचो कि यह वोट दिया जाएगा क्योंकि यह अमान्य नहीं है। – tzup

5

डीएसडब्ल्यू के जवाब पर विस्तार करने के लिए, आप एक गणनीय पर OrderBy उपयोग कर सकते हैं।

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

तुम भी अवरोही क्रम में यह कर सकते हैं:

customCollection.OrderByDescending(cc => cc.FieldToOrderBy); 
+0

संग्रह को सॉर्ट किए जाने पर संग्रह को किसी अन्य थ्रेड द्वारा बदला जा सकता है? या ऑर्डरबी एक नई सूची बनाते हैं –

+1

ऑर्डरबी सिर्फ एक नया आईनेमरेबल टाइप करता है। अंतर्निहित डेटा संरचना नहीं बदली है। –