LINQ

2011-06-20 10 views
6

के साथ किसी सूची में दिए गए ऑब्जेक्ट की संख्या की संख्या मेरे पास एक सूची है जिसमें एक ही ऑब्जेक्ट की कई घटनाएं हो सकती हैं। अब मुझे गिनने की जरूरत है, इस सूची में दी गई वस्तु कितनी बार निहित है।LINQ

int count = 0; 
foreach (IMyObject item in myList) 
    if (item == object2Count) 
    count++; 

मुझे यकीन है कि यह LINQ के साथ अच्छा किया जा सकता है, लेकिन LINQ अभी भी मेरे लिए एक रहस्य है।

मेरा पहला सवाल यह है कि: मैं LINQ के माध्यम से वस्तुओं को कैसे गिनता हूं और दूसरा प्रश्न: क्या यह LINQ संस्करण धीमा या तेज़ होगा? मैं आमतौर पर अपेक्षाकृत छोटे ... आम तौर पर नहीं तो और अधिक 20.

अग्रिम धन्यवाद,
फ्रैंक है एक ObservableCollection और सूची में आइटम्स की संख्या का उपयोग कर रहा

उत्तर

10

आप आसानी से उपयोग कर एक संग्रह में वस्तुओं भरोसा कर सकते हैं Count विस्तार विधि। कोई एक:

var count = myList.Where(item => item == object2Count).Count(); 

या

var count = myList.Count(item => item == object2Count); 

के साथ प्रदर्शन के संबंध में यह foreach लूप के रूप में ही होना चाहिए।

(। आपका विधेय item == object2Count थोड़ा अजीब लग रहा है लेकिन है कि कैसे एक संग्रह में वस्तुओं की गिनती करने के लिए के बारे में प्रश्न से संबंधित नहीं है)

+0

उत्तर के लिए धन्यवाद। अब जब मैं जवाब देखता हूं, ऐसा लगता है कि यह स्पष्ट है: डी। मेरे भविष्य के लिए, इसके बारे में अजीब बात क्या है और आप इसे किसी अन्य तरीके से लिखने का सुझाव कैसे देंगे? – Aaginor

+0

@Aaginor: यदि '==' संदर्भ समानता का उपयोग कर रहा है और आप संग्रह 'गणना' में एक से अधिक बार एक ही उदाहरण को स्टोर नहीं करते हैं तो 0 या 1 होगा। तो मूल रूप से आप यह निर्धारित कर रहे हैं कि 'object2Count' संग्रह से संबंधित है या नहीं । 'किसी भी' एक्सटेंशन विधि का उपयोग करने के लिए और अधिक कुशल तरीके हैं। यदि दूसरी तरफ आपने '==' ऑपरेटर को ओवरराइड किया है तो आपका भविष्य ठीक है। –

+0

मैं संग्रहित करने के लिए एक डुप्लिकेट ऑब्जेक्ट नहीं बनाता, लेकिन एक ही संदर्भ को कई बार संग्रहीत करता हूं। (IMyObject o = new MyObject(); myList.Add (o); myList.Add (o);) (या कम से कम मुझे विश्वास है कि मैं एक ही ऑब्जेक्ट स्टोर करता हूं: डी) – Aaginor

0

इस प्रयास करें:

var count = objectlist.Count(x => x == object2Count)); 
+1

-1 - यह क्वेरी 'object2Count' के उदाहरणों की गिनती वापस नहीं करती है लेकिन वर्ग 'ऑब्जेक्ट क्लास' –

+0

की वस्तुओं की संख्या को गलत नहीं है, यह गलत है, वह किसी निश्चित वर्ग की सभी वस्तुओं की तलाश नहीं कर रहा है, लेकिन किसी विशिष्ट वस्तु के लिए – Vedran

संबंधित मुद्दे