LINQ

2010-02-14 10 views
8

मैं निम्नलिखित कोड के साथ शब्दों की एक सरणी से शब्दों की एक अलग सूची प्राप्त करने की कोशिश कर रहा हूँ के साथ सरणी से शब्दों की अलग सूची का चयन करें 'यह' लेकिन यह वाक्यांश के प्रत्येक शब्द की एक सूची देता है।LINQ

किसी का सुझाव दें सकते हैं कि कैसे मैं एक अलग सूची प्राप्त करने के बारे में जा सकते हैं? धन्यवाद

डेव

+0

2 लाइन 'स्ट्रिंग [] विभाजन = शब्द नहीं होना चाहिए। स्प्लिट() '? –

+0

डी ओह! - @ मार्क, तुम सही हो। मुझे लगता है कि मुझे अपनी प्रतिलिपि/पेस्ट के साथ थोड़ा सा मैला मिला - मैंने इसे अभी तय कर लिया है। हालांकि उस चरण में मेरे पास एक या दो गिलास थे! :-) – DaveDev

उत्तर

19

प्रयास करें अपने उदाहरण में, प्रत्येक पद वस्तु , अलग है कोई तुलना जो पाठ संपत्ति पर लग रहा है क्योंकि वहाँ।

var distinctWords = (from w in split 
         select w).Distinct().ToList(); 

या अधिक बस:

var distinctWords = new List<string>(split.Distinct()); 
1

आप अपने Word वर्ग के लिए कोड पोस्ट नहीं किया है, लेकिन मेरा अनुमान है कि यह एक मूल्य तुलना के साथ Equals को लागू नहीं करता है तो आप जो सिर्फ वस्तु की जाँच करता है Equals के डिफ़ॉल्ट कार्यान्वयन मिलता है संदर्भ। ध्यान दें कि यदि आप Equals के अपने संस्करण को लागू करने का निर्णय लेते हैं, तो आपको GetHashCode को सही ढंग से कार्यान्वित करने की भी आवश्यकता है।

इस समस्या को हल करने का एक वैकल्पिक तरीका IEqualityComparerDistinct फ़ंक्शन के पैरामीटर के रूप में प्रदान करना है।

1

समस्या यह है कि आप कई वर्ड ऑब्जेक्ट्स बनाते हैं जिनमें एक ही वैल्यू होता है, लेकिन संकलक को कैसे पता होना चाहिए, ये वही आइटम होंगे?

(from w in split.Distinct() 
select new Word { Text = w.ToString()}).ToList(); 
0

दूसरों के रूप में बताया गया है, यह समस्या शायद कि आपके Word वस्तु संरचनात्मक लागू नहीं करता है

हालांकि, वहाँ एक नई वस्तु बनाने के लिए कोई कारण नहीं है समानता (वास्तविक सामग्री की तुलना करें, उदाहरण संदर्भ नहीं)। आप अभी भी परिणाम के रूप में Word वस्तुओं का संग्रह मिलता है, लेकिन अंतर्निहित स्ट्रिंग मूल्यों पर Distinct उपयोग करना चाहते हैं, तो आप इस लिख सकते हैं:

IEnumerable<Word> distinctWords = 
    (from w in split.Distinct() 
    select new Word { Text = w.ToString() }).ToList(); 
संबंधित मुद्दे