2013-03-08 4 views
6
var multiples = from i in Enumerable.Range(min, (max - min)) 
         from r in roots 
         where i % r == 0 
         select i; 

उदाहरण के लिए, यदि roots = {2,10} यह 20 दो बार चयन करेगा।सी # डुप्लिकेट से बचने की कोशिश

क्या डुप्लीकेट से बचना संभव है?

+0

आप 'multiples.Distinct()' बाद में, डुप्लिकेट वाले नहीं होंगे उपयोग करते हैं कृपया। –

उत्तर

8

आप एक पूरे कार्तीय के बजाय Any() उपयोग कर सकते हैं में शामिल होने:

var multiples = from i in Enumerable.Range(min, (max - min)) 
       where roots.Any(r => i % r == 0) 
       select i; 

यह अतिरिक्त लाभ यह है कि यह जैसे ही यह एक पाता है roots में परीक्षण के तत्वों बंद हो जाएगा है जो सफल होता है, और इसे अलग-अलग तत्वों को खींचने के लिए दूसरे पास की आवश्यकता नहीं होती है।

+1

निश्चित रूप से यह इस मामले में 'डिस्टिंक()' से अधिक स्मार्ट है। –

+0

जो वही है जो मैं ढूंढ रहा हूं! बहुत ही शांत! – user1376243

+0

@JeppeStigNielsen ओह हाँ। एक अच्छी पहल। ऐसा तब होता है जब किसी को प्रश्न में क्या किया जा रहा है, इस बारे में वास्तव में सोचने में समय लगता है। –

11

उपयोग Distinct

var multiples = (from i in Enumerable.Range(min, (max - min)) 
       from r in roots 
       where i % r == 0 
       select i).Distinct(); 

यह string और int की तरह साधारण प्रकार पर अच्छी तरह से काम करता है। अनाम प्रकारों पर बहुत अच्छी तरह से नहीं है।

आपके मामले में i एक int है, और इसलिए इसे गणराज्य को हल करने के लिए होना चाहिए।

संपादित

यह वास्तव में गुमनाम प्रकार पर काम करता है करता है (Jeppe की टिप्पणी देखें)। क्योंकि @ जेपेपे ने कहा कि अज्ञात प्रकारों में "अच्छा" EqualsDistict को लेबल करने के लिए यह निर्धारित करने के लिए है कि ऑब्जेक्ट्स बराबर/गणराज्य हैं या नहीं।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद! – user1376243

+1

@ user1376243 अगर यह आपकी क्वेरी का समाधान करता है तो टिक पर क्लिक करके उत्तर स्वीकार करें। –

+5

आप: अज्ञात प्रकारों पर बहुत अच्छी तरह से नहीं हैं। यह ('डिस्टिंट()' अज्ञात प्रकारों पर बहुत अच्छा काम करता है बशर्ते कि अनौपचारिक प्रकार की प्रत्येक संपत्ति का प्रकार "अच्छा" 'बराबर 'और' गेटहाशकोड 'कार्यान्वयन के साथ एक प्रकार है। अनाम प्रकार में (स्वचालित रूप से) 'बराबर' और 'गेटहाशकोड' होगा जो "समन्वय-वार" समानता तुलना को लागू करेगा। –

4

उपयोग DISTINCT

var multiples = (from i in Enumerable.Range(min, (max - min)) 
         from r in roots 
         where i % r == 0 
         select i).Distinct(); 
1

का उपयोग Distinct() विधि

var multiples = (from i in Enumerable.Range(min, (max - min)) 
       from r in roots 
       where i % r == 0 
       select i).Distinct(); 
संबंधित मुद्दे

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