2008-08-20 17 views
9

मानों की 'सूची' से मूल्य के बराबर है यदि मेरे पास सी # में एक चर है जिसे यह निर्धारित करने के लिए जांच की आवश्यकता है कि यह चर के एक सेट के बराबर है, तो क्या है ऐसा करने का सबसे अच्छा तरीका है?यह निर्धारित करने के लिए सबसे संक्षिप्त तरीका है कि एक चर वैल्यू

मैं एक ऐसे समाधान की तलाश नहीं कर रहा हूं जो एक सरणी में सेट को संग्रहीत करता है। मैं यह देखने के लिए उत्सुक हूं कि क्या कोई समाधान है जो उत्तर पाने के लिए किसी भी तरह से बूलियन तर्क का उपयोग करता है।

मैं जानता हूँ कि मैं कुछ इस तरह कर सकता है:

int baseCase = 5; 
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5; 

मैं देखना उत्सुक हूँ अगर मैं अधिक कुछ इस तरह कर सकता है:

int baseCase = 5; 
bool testResult = baseCase == (3 | 7 | 12 | 5); 

जाहिर है ऊपर काम नहीं करेगा, लेकिन मुझे यह देखने में दिलचस्पी है कि मेरे पहले उदाहरण की तुलना में कुछ और संक्षिप्त है, जिसे प्रत्येक टेस्ट वैल्यू के लिए एक ही चर को बार-बार दोहराना पड़ता है।

अद्यतन:
मैं CoreyN के जवाब को स्वीकार करने के रूप में यह सबसे सरल दृष्टिकोण की तरह लगता है फैसला किया। नौसिखिया समझने के लिए यह व्यावहारिक है, और अभी भी सरल है, मुझे लगता है।

दुर्भाग्यवश जहां मैं अपना सिस्टम काम करता हूं, .NET 2.0 ढांचे का उपयोग करता है और जल्द ही किसी भी समय अपग्रेड करने का कोई मौका नहीं है। सबसे स्पष्ट एक के अलावा मैं के बारे में सोच सकते हैं वहाँ किसी भी अन्य समाधान है कि .NET 3.5 फ्रेमवर्क पर भरोसा नहीं करते हैं,:

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5); 
+0

यहां एक .NET 2 है।0 समाधान, कोरी की तुलना में थोड़ा अधिक जटिल: http://stackoverflow.com/questions/18407#153037 – Joe

+0

एक जावास्क्रिप्ट उदाहरण http://stackoverflow.com/questions/12116326 – Lijo

उत्तर

0

मैं आमतौर पर की तरह साधारण मामलों के लिए CoreyN के solution का उपयोग उस। कुछ और जटिल, LINQ क्वेरी का उपयोग करें।

-1

चूंकि आपने यह निर्दिष्ट नहीं किया है कि आपके पास इनपुट के रूप में किस प्रकार का डेटा है, मुझे लगता है कि आप अपने इनपुट को 2 -> 2,4,8,16 की शक्तियों में विभाजित कर सकते हैं ... इससे आपको उपयोग करने की अनुमति मिल जाएगी यह निर्धारित करने के लिए बिट्स कि आपका परीक्षण मान इनपुट में बिट्स में से एक है या नहीं।

4 => 0,000,100
16 => 0,010,000
64 => 1000000

कुछ द्विआधारी गणित का उपयोग कर ...

testList = 4 + 16 + 64 => 1010100
testValue = 16
testResult = testList & testValue

1

आप .NET 2.0 के साथ इसी तरह कुछ कर सकते हैं, एक सरणी ओ कि तथ्य का लाभ लेने के द्वारा एफ टी लागू करता है IList < टी >, और IList < टी > में एक विधि शामिल है। इसलिए निम्नलिखित है, हालांकि स्पष्ट रूप से कम स्पष्ट कोरी के .NET 3.5 समाधान के बराबर है:

bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5); 

मैं अक्सर सरणी घोषणाओं, या कम से कम एक आयामी सरणी तर्क पारित करने के लिए के लिए IList < टी > का उपयोग करें। इसका मतलब है कि आप गिनती गुणों जैसे गिनती गुणों का उपयोग कर सकते हैं, और किसी सरणी से आसानी से सूची में स्विच कर सकते हैं। जैसे

private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 }; 
संबंधित मुद्दे

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