2010-01-24 15 views
5

मैं बस समझ में नहीं आ कैसे संपादित एक स्विच बयान के अंदरमैं केस स्टेटमेंट में बूलियन ऑपरेटर का उपयोग कैसे करूं?

switch (expression) { 
     case > 20: 
      statements 
      break; 
     case < -20: 
      statements 
      break; 
    } 

एक बूलियन ऑपरेटर का उपयोग करने के लिए:
मैं एक है() बयान नहीं करना चाहती।

+0

कोई अभिव्यक्ति नहीं जब अभिव्यक्ति == 20'? –

+0

नहीं, केवल इसलिए कि केस स्टेटमेंट पढ़ने के लिए आसान हैं और वे if() कथन से तेज़ हैं। 'अभिव्यक्ति == 20' जब मैं कोई व्यवहार नहीं चाहता हूं। – Jaba

+1

वे तेज़ हैं क्योंकि वे कम शक्तिशाली हैं। आपको एक समय में निश्चित मूल्यों के साथ तुलना करना होगा। आप 'स्विच' कथन का उपयोग करके जो दिखाए गए हैं उसे व्यक्त नहीं कर सकते हैं। – zneak

उत्तर

5
switch ((expression) > 20) { 
     case true: 
      statements 
      break; 
     case false: 
     default: 
      statements 
      break; 
    } 

क्या .. आप किसी मामले में 1 से अधिक बूलियन चाहते हैं? आप इस

int ii = ((expression) > 20) + 2 * ((expression) < -20); 
switch (ii) { 
     case 1: 
      statements 
      break; 
     case 2: 
      statements 
      break; 
    } 

यह कर सकता है, IMO बहुत बुरा कोड है, लेकिन इसके लिए ...

बस अगर बयान का उपयोग करें, आप लंबे समय में बेहतर हो जाएगा कि तुम क्या पूछा है।

+0

मैं यह याद दिलाना चाहता हूं कि यह अधिकतर तुलना है जो 'स्विच' से धीमी गति से 'if' बनाता है, और इसके परिणामस्वरूप यह आपके कोड को तेज़ी से आगे बढ़ाने में मदद नहीं करेगा। – zneak

+0

वास्तव में यह सच नहीं है। यह शाखा है जो मंदी का कारण बनती है, तुलना नहीं। लेकिन एक स्विच अभी भी एक शाखा है। –

+0

मैं एक साल का अंतराल हूं, लेकिन अगर कोई इस जवाब पर ठोकर खाता है, तो मेरा मतलब यह था कि 'if' और 'switch' दोनों एक शाखा का कारण बनते हैं (और यह सबसे धीमा हिस्सा है), तो क्या होगा अगर/अगर 'स्विच' कथन से धीमे जोड़े यह है कि वे प्रति शर्त एक तुलना करते हैं। दूसरी तरफ, एक 'स्विच' आमतौर पर चतुर चाल का उपयोग करके कार्यान्वित किया जाता है जो तुलनात्मक रूप से तुलना से बचने के लिए संभव बनाता है, चाहे कितना मामला है। – zneak

10

आप नहीं कर सकते। if() ... else ... का उपयोग करें।

जीसीसी एक्सटेंशन का उपयोग करने के लिए आप जो भी चाहते हैं उसके लिए निकटतम चीज़ उपलब्ध है और इस प्रकार गैर-मानक है। तुम सिर्फ एक मूल्य के बजाय मामले बयान में पर्वतमाला परिभाषित कर सकते हैं:

switch(foo) 
{ 
    case 0 ... 20: // matches when foo is inclusively comprised within 0 and 20 
     // do cool stuff 
     break; 
} 

हालांकि, आपको लगता है कि उपयोग नहीं कर सकते एक निश्चित मूल्य के तहत कुछ भी मैच के लिए। यह एक सटीक सीमा में होना चाहिए। Switch es केवल तुलना ऑपरेटर को स्थिर के विरुद्ध बदलने के लिए उपयोग किया जा सकता है, और इसका उपयोग किसी भी चीज़ के लिए नहीं किया जा सकता है।

+0

दुर्भाग्यवश, लचीलापन की लागत पर गति आती है, और एक स्विच के बजाय बुलियन ऑपरेटर का उपयोग करने के आसपास कोई रास्ता नहीं है। यह तेज़ है क्योंकि सीपीयू पर ऐसा करने के लिए कम काम है। यदि आप 'स्विच' के अंदर एक बूलियन ऑपरेटर का उपयोग कर सकते हैं, तो 'if' कथन' स्विच 'कथन की तुलना में धीमी गति से कोई कारण नहीं होगा। – zneak

+0

क्या होता है जब मेरे पास 5 मामलों की तुलना में अधिक है? – Jaba

+0

ठीक है, यह सिर्फ अंगूठे का मेरा नियम है, और मेरा मतलब यह नहीं था कि यह इस तरह के पूर्ण नियम की तरह दिखता हो। आप जो भी चाहें वह करते हैं। मैं इसे संपादित करने जा रहा हूँ। – zneak

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