vb.net या सी # कि सबसे तेजी से सामान्य दृष्टिकोण एक तुलना करने के लिए मैं उम्मीद करेंगे में अलग-अलग नामित वस्तुओं की किसी भी उचित संख्या के विरुद्ध परिवर्तनीय (उदाहरण के लिए संग्रह में सभी चीजों के विपरीत) प्रत्येक ऑब्जेक्ट की तुलना तुलनात्मक रूप से तुलना करने के लिए किया जाएगा जैसा आपने किया है। संग्रह का एक उदाहरण बनाना निश्चित रूप से संभव है और देखें कि इसमें ऑब्जेक्ट है या नहीं, और ऐसा करने से वस्तु को सभी वस्तुओं के विरुद्ध तुलना करने की तुलना में अधिक अभिव्यक्तिपूर्ण हो सकता है, लेकिन जब तक कि कोई ऐसा निर्माण नहीं करता जो संकलक स्पष्ट रूप से पहचान सके, ऐसे कोड व्यक्तिगत रूप से व्यक्तिगत तुलना करने से लगभग निश्चित रूप से धीमा हो जाएगा। मैं गति के बारे में चिंता नहीं करता अगर कोड अपनी प्रकृति से प्रति सेकंड कुछ सौ गुना दौड़ता है, लेकिन मैं उस शर्त से सावधान रहूंगा जो मूल रूप से इरादे से अधिक बार चलाया जाता है।
एक वैकल्पिक दृष्टिकोण, यदि कोई चर एक गणना प्रकार की तरह कुछ है, तो बिटमास्क के उपयोग की अनुमति देने के लिए दो-दो गणना मानों का चयन करना है। यदि गणना प्रकार में 32 या कम मान्य मान हैं (उदाहरण के लिए हैरी = 1, रॉन = 2, हर्मियोन = 4, गिनी = 8, नेविल = 16) एक व्यक्ति उन्हें एक पूर्णांक में स्टोर कर सकता है और एक बार में कई बिट्स की जांच कर सकता है ऑपरेशन ((अगर (0 यह(हैरी | रॉन | नेविल | बीट्रिक्स))! = 0)/* कुछ करें * /। यह तेज़ कोड की अनुमति देगा, लेकिन यह संख्याओं की एक छोटी संख्या के साथ गणना तक ही सीमित है।
कुछ और अधिक शक्तिशाली दृष्टिकोण, लेकिन देखभाल के साथ उपयोग किया जाना चाहिए, किसी चीज के गुणों को इंगित करने के लिए मूल्य के कुछ बिट्स का उपयोग करना है, जबकि अन्य बिट्स आइटम की पहचान करते हैं। उदाहरण के लिए, बिट 30 इंगित कर सकता है कि एक चरित्र पुरुष है , बिट 2 दोस्त-ऑफ-हैरी इत्यादि को इंगित कर सकता है, जबकि निचले बिट वर्णों के बीच अंतर करते हैं। यह दृष्टिकोण उन पात्रों को जोड़ने की अनुमति देगा जो दोस्त के हैंरी हो सकते हैं या नहीं, बिना कोड की आवश्यकता के कोड बदलने के लिए दोस्त हैरी। ऐसा करने के साथ एक चेतावनी यह है कि किसी को गणित स्थिरांक के बीच अंतर करना चाहिए जिसका उपयोग गणना गणना मूल्य के लिए किया जाता है, और जो इसे परीक्षण करने के लिए उपयोग किए जाते हैं। उदाहरण के लिए, हैरी को इंगित करने के लिए एक चर सेट करने के लिए, कोई इसे 0x60000001 पर सेट करना चाहता है, लेकिन यह देखने के लिए कि कोई चर है आईएस हैरी, इसे 0x00000001 के साथ थोड़ा-परीक्षण करना चाहिए।
एक और दृष्टिकोण, जो उपयोगी हो सकता है यदि संभावित मूल्यों की कुल संख्या मध्यम है (उदाहरण के लिए 16-16,000 या उससे अधिक) प्रत्येक मान से जुड़े झंडे की एक सरणी है।तब कोई कुछ "कोड (" (चरित्र गुण [theCharacter] & chracterAttribute.Male)! = 0) "। यह दृष्टिकोण सबसे अच्छा काम करेगा जब वर्णों की संख्या काफी छोटी है। यदि सरणी बहुत बड़ी है, तो कैश मिस धीमा हो सकता है आप टी > मूल्यों की नियत सूची में एक मूल्य में कई बार, HashSet < खोज करते हैं का कहना है कि पात्रों की एक छोटी संख्या के खिलाफ परीक्षण करने के लिए कोड नीचे व्यक्तिगत रूप से तेजी से होगा।
आसान व्यक्तिगत प्राथमिकता है। निजी तौर पर, मुझे नहीं लगता कि यह 'value == 1 || से कहीं अधिक आसान हो जाता है मान == 2'। –
@ जोएल: यह आसान है, लेकिन किसी ऐसे व्यक्ति के लिए सहज नहीं है जो कहता है "मैं इसे 1 या 2 होना चाहता हूं"। जैसा कि यह पता चला है, ऐसी भाषाएं हैं जो इस वाक्यविन्यास को ठीक से लागू करती हैं; आईबीआई की फोकस क्वेरी लैनागुएज, एक के लिए। –
@ स्टेवन सूडिट - उस संदर्भ में "अंतर्ज्ञानी" व्यक्तिगत वरीयता के लिए उबलता है। –