2009-11-04 14 views
5

के लिए सी # सूची खोजने के लिए त्वरित तरीके हैं, वर्तमान में मेरे पास regkey नामक एक सूची है और line_to_delete नामक एक स्ट्रिंग है, जिसे मैं स्पष्ट रूप से सूची से हटाना चाहता हूं। फिलहाल मैं substrings बनाने के समय सूची के एक तत्व के माध्यम से खोज रहा हूं क्योंकि line_to_delete केवल उस पंक्ति का हिस्सा प्रस्तुत करता है जिसे मैं हटाना चाहता हूं लेकिन सूची में विशिष्ट रूप से पहचाना जा सकता है। सबस्ट्रिंग्स

वैसे भी मुझे वास्तव में क्या करने की ज़रूरत है यह अधिक कुशल बनाते हैं, कम संसाधनों का उपयोग करते हैं और जल्दी होते हैं, तो क्या ऐसा करने के कोई तरीके हैं?

उत्तर

6

उपयोग लांबा भाव अगर यह एक List<string> है:

list.RemoveAll(x => x.Contains(line_to_delete)); 
+0

यह अभी भी ओ (एन) प्रदर्शन – mfeingold

+0

हाँ होगा, लेकिन चूंकि ओपी सबस्ट्रिंग्स पर मेल खाता है, मुझे नहीं लगता कि सॉर्टेडलिस्ट मदद करेगा। –

+0

सच है, लेकिन आपके पास बाइनरी पेड़ है और आप अपने बाइनरी खोज को मौजूदा पेड़ पर स्वयं लागू कर सकते हैं। यह हमें मुश्किल नहीं है और आपको ओ (लॉग (एन)) इस तरह से – mfeingold

2
 List<String> regKey = new List<String> { "test1", "test2" }; 
     var toDelete = regKey.Where(u => u.Contains(line_to_delete)).SingleOrDefault(); 
     if (toDelete != null) 
      regKey.Remove(toDelete); 

या

regkey.RemoveAll(k => k.Contains(line_to_delete)); 

यह आपके हटाए जाने अधिक पठनीय कर देगा, लेकिन मैं प्रदर्शन अपने वर्तमान पद्धति के खिलाफ तुलना पर यकीन नहीं है।

var result = list.Where(x => !x.Contains(line_to_delete)) 

पहले, यकीन है कि यह काफी कुशल नहीं है:

2

सबसे आसान तरीका उपयोग करने के लिए है। यदि ऐसा नहीं है, तो आपको trie जैसे अपने तारों का प्रतिनिधित्व करने के लिए उन्नत डेटा संरचनाओं का सहारा लेना होगा। ऐसी किसी भी चीज के लिए सी # में कोई मूल समर्थन नहीं है।

3

आपका सबसे अच्छा शर्त सूची को सॉर्ट और द्विआधारी खोज का उपयोग करने के लिए है। SortedList आप के लिए .. इस तरह आप हे (लॉग (एन)) प्रदर्शन

+0

सूची में एक बार बाइनरी खोज विधि भी है: http://msdn.microsoft.com/en-us/library/3f90y839.aspx – Powerlord

+0

नहीं, यह नहीं है मदद करें, क्योंकि ओपी मिलान करने वाले सबस्ट्रिंग के लिए खोज कर रहा है। –

+1

सूची को सॉर्ट करने की लागत के बारे में क्या? –

2

मुझे लगता है कि यह indexOf बल्कि शामिल की तुलना में उपयोग करने के लिए बेहतर है प्राप्त कर सकते हैं, कि ऊपर खोज

गति इतनी का उपयोग करके कर देगा:

regkey.RemoveAll(k => k.IndexOf(line_to_delete) >=0); 
संबंधित मुद्दे

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