एक टेंटरी, या तीन-राज्य चर को स्टोर करने के लिए सर्वश्रेष्ठ डेटाटाइप


13

डिस्क्लेमर: मुझे पता है कि डेटाटाइप्स थोड़ा सा सब्जेक्टिव है, जिसकी स्क्रिप्टिंग / प्रोग्रामिंग भाषा आप इस्तेमाल कर रहे हैं, मैं पाइथन में लिखना पसंद करता हूं; हालांकि मैं किसी भी lanugage / कार्यान्वयन के बारे में सुनकर खुश हूं।

तीन-राज्य चर को स्टोर करने के लिए सबसे अच्छा डेटाटाइप क्या है? पॉजिटिव, न्यूट्रल और नेगेटिव में कुछ सक्षम या प्रतिनिधित्व करने वाला।

उदाहरण: पूर्णांकों -1, 0, 1

  • प्रो: बहुत संक्षिप्त।
  • प्रो: संभावित रूप से कुशल, एक एकल-बिट हस्ताक्षरित पूर्णांक के रूप में संग्रहीत किया जा सकता है।
  • प्रो: एक पैमाने के रूप में इस्तेमाल किया जा सकता है, जैसे कि एक अस्थायी बिंदु गुणक।

उदाहरण 2: 0, null, 1(या किसी भी परिवर्तन)

  • प्रो: गैर-तटस्थ उपयोग मामला बाइनरी हो सकता है।
  • Con: डायनेमिक डेटाटाइप की आवश्यकता है
  • Con: संभावित रूप से संक्षिप्त नहीं।

उदाहरण 3: +, (रिक्त स्ट्रिंग),-

  • प्रो: बहुत संक्षिप्त।
  • Con: राज्य का निर्धारण करने के लिए स्ट्रिंग लॉजिक का उपयोग कर सकते हैं।
  • प्रो ?: सहज चित्रमय प्रतिनिधित्व।

शायद कुछ चतुर बाइनरी लॉजिक है जो कुछ ऐसा कर सकता है जो मैं सोच भी नहीं सकता, शायद उपयोग के मामले के बहुत सारे विचार हैं।

इसके अलावा, डेटाबेस इंजन में स्टोर करने के लिए एक टर्नरी राज्य को अपनाने पर कोई विचार है? संदर्भ के लिए इनोडब की तरह।



इबीडेम, लेकिन मैं इसमें कई भाषाओं में शामिल करूँगा, जो एन्यूमरेटेड प्रकार से आपको कुछ अन्य प्रकार में जूते मारने की कोशिश करने की तुलना में बहुत अधिक सुरक्षा प्रदान करते हैं।
ब्लरफुल

4
यह प्रश्न उपयोग-मामले पर अत्यधिक निर्भर है। सामान्य तौर पर, सूचीबद्ध कार्यान्वयन के सभी विकल्प अलग-अलग समय पर, कुछ अलग-अलग उद्देश्यों के लिए उपयुक्त लगते हैं।
रवांग

2
.NET में आप एक अशक्त बूलियन का उपयोग कर सकते हैं। अधिकांश डेटाबेस आपको एक अशक्त अवस्था के साथ बूलियन (या बिट के रूप में इसे अक्सर कहा जाता है) को स्टोर करने की अनुमति देगा। आप भंडारण के लिए एक चार का उपयोग भी कर सकते हैं। भंडारण तंत्र को बदलने के लिए चार बाद के समय में अधिक कमरे की अनुमति देगा।
एडम ज़ुकरमैन

1
बूल के लिए एक सूचक भी प्रयोग करने योग्य हो सकता है। बूल को 0 और 1 के लिए मजबूर किया जाता है और यदि सूचक NULL है तो आपके पास तीसरा राज्य है। पाठ्यक्रम के लैंग्वेज पर निर्भर करता है।
Devolus

जवाबों:


7

एक एनुम के अलावा जो इसे व्यक्त करने का स्पष्ट और स्पष्ट तरीका है, इंटरऑपरेबल सिस्टम के लिए इस्तेमाल किया जाने वाला सिस्टम जहां एक भाषा-विशिष्ट एनम व्यक्त नहीं किया जा सकता है, वह -1/0/1 विकल्प है।

आप एक बिटमास्क की कोशिश करना पसंद कर सकते हैं, जहाँ 0 का अर्थ है 0, 1 का अर्थ है 'बिट 2 सेट' और 2 का अर्थ है 'बिट 3 सेट' (यानी आपके पास 3 बिट्स हैं जो चालू या बंद हो सकते हैं। जब तक आप परिभाषित नहीं करते हैं। 3, या बिट्स 1 और 2 सेट, तो आप अच्छे हैं। यह विकल्प सबसे अच्छा है यदि आपको लगता है कि आपको भविष्य में 4 या 8 या अधिक झंडे की आवश्यकता हो सकती है, जैसे कि बाद के बिट्स)।

ये सभी एक 8-बिट डेटाटाइप में फिट होते हैं, इसलिए यह मेमोरी की बर्बादी नहीं होगी या रूपांतरण की आवश्यकता नहीं होगी (जैसा कि वर्ण आधारित प्रणाली होगी, कभी-कभी 16-बिट चार्ट का उपयोग किया जाता है, कभी-कभी आपके प्लेटफॉर्म पर निर्भर करता है)।

मैं किसी भी मामले में अशक्त नहीं होगा। शायद एक डेटाबेस में, लेकिन केवल जहाँ मैं गारंटी दे सकता था कि सिस्टम को NULLs के लिए अलग समर्थन था, और तब भी यह त्रुटि हो सकती है अगर किसी ने स्पष्ट रूप से भेद नहीं किया था और 0 के साथ समाप्त हो गया जब यह वास्तव में अशक्त था।


यहाँ पर सबसे अच्छा जवाब IMO। NULL यह हो सकता है कि इसे केवल DB में नहीं जोड़ा गया था, ऐसा नहीं है कि इसका राज्य 'NULL' -1,0,1 था और संभवतः NULL - नल स्पष्ट रूप से इंगित करता है कि क्षेत्र कभी भी आबाद नहीं था!
केन

3

मेरा इस प्रश्न का स्पष्ट उत्तर सीधे लिखने का इरादा नहीं है; जैसा कि मैंने ऊपर कहा, यह प्रश्न उपयोग-मामले पर अत्यधिक निर्भर है। सामान्य तौर पर, सूचीबद्ध कार्यान्वयन के सभी विकल्प अलग-अलग समय पर, कुछ अलग-अलग उद्देश्यों के लिए उपयुक्त लगते हैं।

हालांकि, मैं इन अंतर्निहित सिद्धांतों और पृष्ठभूमि ज्ञान पर आपका ध्यान आकर्षित करना चाहूंगा, ताकि आप अपने स्वयं के सूचित निर्णय ले सकें।


एक हल्के नोट पर, यह मज़ाक भी पढ़ें: "एक व्यापारी एक एकाउंटेंट से पूछता है; दो प्लस दो क्या है?"

सभी एकाउंटेंट और गैर-एकाउंटेंट के लिए माफी। इस मजाक का मेरा उल्लेख कुछ ऐसा करने की स्वतंत्रता को उजागर करना है जिसे हम बहुत जल्द परिभाषित करने जा रहे हैं, और जिम्मेदारी और परिणाम (दोनों एक तार्किक अर्थ में) जो इस प्रकार हैं।


प्रश्न: तीन-मूल्यवान तर्क की सत्य तालिका क्या है?

उत्तर:

... अपनी कुर्सी से उठे, दरवाजे पर गए, उसे बंद किया, वापस आए और बैठ गए। डेस्क पर झुक कर,

... और कागज के एक टुकड़े पर एक हाथ से तैयार चार्ट खींचता है।

ऑपरेशन: तार्किक और - गोपनीय - Q3 2014 के लिए ड्राफ्ट

   FalseTrue Third
FalseFalseFalse?????
True FalseTrue ?????
Third???????????????

... उन्होंने धीमी आवाज में कहा, " आप उन जादुई मूल्यों को कितना पसंद करेंगे?"

एक ग्राफिक्स डिजाइनर एक प्रोग्रामर से पूछता है, "क्या आप तीन-मूल्यवान तर्क का उदाहरण दे सकते हैं?"

प्रोग्रामर जवाब देता है, "क्या आप मुझे दो रंग दे सकते हैं, जो जितना काला और सफेद हो सकता है?"

ग्राफिक डिजाइनर: "तो ... काला, और सफेद?"

प्रोग्रामर: "बिल्कुल। अब मैं एक तीसरा रंग देने जा रहा हूं - लेकिन मुझे इसे ARGB नंबर के रूप में निर्दिष्ट करना होगा। मुझे आशा है कि आपको कोई आपत्ति नहीं है।"

ग्राफिक डिजाइनर: "अच्छी तरह से मैं हर रोज ARGB के साथ काम करता हूं ..."

Black#FF000000
White#FFFFFFFF
Nothing#00000000

टिप्पणी। उपरोक्त में, ब्लैक एंड व्हाइट पूरी तरह से अपारदर्शी रंग हैं। तीसरा रंग, कुछ भी नहीं, पूरी तरह से पारदर्शी है। जब विभिन्न अनुपातों में एक साथ मिलाया जाता है, तो ब्लैक एंड व्हाइट विभिन्न ग्रे बन जाता है, लेकिन मिक्सिंग नथिंग कुछ भी नहीं बदलता है।


मुझे एक सत्य तालिका के उपयोग से काफी दिलचस्पी है, फिर से अपने सवालों के पीछे अपनी आँखें खोलना।
ThorSummoner

1

यदि तीन संभावित अवस्थाओं में कुछ अंतर्निहित अर्थ है, तो उस निहित अर्थ के लिए उपयुक्त कुछ का उपयोग करें। उदाहरण के लिए, यह संभव है कि राज्य 1, 2 या 3 हैं, या यदि वे 100, 200 और 300 हैं, तो पूर्णांक का उपयोग करें। यदि संभावित अवस्थाएँ हाँ, नहीं, या अज्ञात हैं, तो आप वैकल्पिक बूलियन या पॉइंटर से बूलियन ऑब्जेक्ट का उपयोग कर सकते हैं, जिसमें कोई मान नहीं होने की संभावना है, "हाँ" मान, या "नहीं" मान। हालांकि कुछ लोग इसे पसंद नहीं कर सकते हैं।

यदि कोई स्पष्ट तरीका है कि पूर्णांकों को संभावित राज्यों के रूप में कैसे व्याख्या किया जा सकता है, तो आप पूर्णांक का उपयोग कर सकते हैं। एक तुलनात्मक फ़ंक्शन कहें, जिसमें "कम", "बराबर" हो, "अधिक से अधिक" -1, 0 और +1 का उपयोग कर सकता है। हालाँकि कुछ लोगों को यह स्पष्ट नहीं लग सकता है कि आप क्या स्पष्ट पाते हैं।

यदि कोई स्पष्ट तरीका है कि अक्षरों को संभावित राज्यों के रूप में कैसे व्याख्या किया जा सकता है, तो आप एक चरित्र का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आपके राज्य "लाल", "हरे" या "नीले" हैं, तो आप 'आर', 'जी' और 'बी' अक्षरों का उपयोग कर सकते हैं। फिर, आपके लिए क्या स्पष्ट है ...

एक enumerated प्रकार हमेशा एक संभावना है। एक स्ट्रिंग हमेशा एक संभावना होती है, लेकिन आप अधिकांश भाषाओं में टाइप चेकिंग खो देते हैं।

कुछ लोग "राज्य 1 में है", "राज्य 2 में है", "राज्य 3 में है" का प्रतिनिधित्व करने के लिए तीन बुलियन मूल्यों का उपयोग करते हैं।

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


0

तीन-राज्य चर को स्टोर करने के लिए सबसे अच्छा डेटाटाइप क्या है? पॉजिटिव, न्यूट्रल और नेगेटिव में कुछ सक्षम या प्रतिनिधित्व करने वाला।

यह भाषा पर बहुत निर्भर करता है कि आप क्या कर रहे हैं, अमूर्त स्तर (जो भाषा पर निर्भर करता है और इसी तरह)।

मैं मुख्य रूप से C ++ का उपयोग करता हूं और यहां बहुत सारे विकल्प हैं। सबसे सरल एक है enum tribool_state { false_val, true_val, undetermined_val }। यदि आपका उपयोग परिदृश्य इस प्रकार के मान को लौटाने वाला एकल कार्य है तो यह पर्याप्त होगा।

मैं शायद उपयोग करूंगा boost::optional<bool>यदि मैं एक बूलियन परिणाम व्यक्त करना चाहता था जो कि प्राप्त करना असंभव हो सकता है (उदाहरण के लिए अगर प्राप्त किया गया नेटवर्क डेटा पूर्ण है, तो बूलियन मान को संसाधित करें यदि ऐसा है)।

मैं का प्रयोग करेंगे boost::triboolअगर मैं एक फजी बूलियन नतीजा यह है कि पूर्ण त्रि राज्य बूलियन तर्क समर्थित (जैसे व्यक्त करना चाहते थे true || indetermined -> true, false && indetermined -> false, true && indetermined -> indeterminedऔर इतने पर)।

इसी तरह, अजगर में, मैं स्थिरांक, या एक वर्ग (फिर, किस तरह के शब्दार्थ / संचालन के आधार पर ग्राहक कोड की आवश्यकता होगी) का उपयोग करूंगा:

उदाहरण के लिए, मैं उपयोग करूंगा:

POSITIVE, INDETERMINED, NEGATIVE = 1, 0, -1

अगर मेरे पास एक फ़ंक्शन का एक साधारण मामला था, तो तीन परिणामों में से एक को वापस करना।

अगर मेरे पास त्रिकोणीय राज्य के तर्क की आवश्यकता वाले पूर्ण पुस्तकालय के बजाय, मैं एक वर्ग के रूप में मूल्य प्रकार को लागू करूंगा।


0

यदि आप जावा का उपयोग कर रहे हैं, तो आप बूलियन ऑब्जेक्ट का उपयोग कर सकते हैं: चूंकि यह एक ऑब्जेक्ट है और इसमें एक बूलियन होता है, यह मूल्यों को सही, गलत और अशक्त रख सकता है। मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है।


-6

Microsoft.NET में, "Tuple" एक प्रकार है जिसका उपयोग आपकी आवश्यकता के लिए किया जा सकता है। यात्रा http://msdn.microsoft.com/en-us/library/system.tuple%28v=vs.110%29.aspx


उस पृष्ठ पर: एक टपल एक डेटा संरचना है जिसमें तत्वों की एक विशिष्ट संख्या और अनुक्रम होता है। टपल का एक उदाहरण तीन तत्वों के साथ एक डेटा संरचना है (जिसे 3-टपल या ट्रिपल के रूप में जाना जाता है) जिसका उपयोग पहचानकर्ता को संग्रहीत करने के लिए किया जाता है जैसे कि पहले तत्व में एक व्यक्ति का नाम, दूसरे तत्व में एक वर्ष, और व्यक्ति की आय तीसरे तत्व में उस वर्ष के लिए। .NET फ्रेमवर्क सीधे एक से सात तत्वों के साथ tuples का समर्थन करता है। इसके अलावा, आप एक ट्यूपल <T1, T2, T3, T4, T5, T5, T6, T7, TRest> ऑब्जेक्ट की बाकी संपत्ति में ट्यूल ऑब्जेक्ट्स को घोंसले द्वारा आठ या अधिक तत्वों के ट्यूल बना सकते हैं।
एडम जुकरमैन

1
यह कहता है कि एक टपल किसी भी प्रकार को एक ऑक्टूपल (8 आयाम) तक संग्रहीत कर सकता है।
एडम ज़ुकरमैन


मेरी लैंग-ऑफ-पसंद, पायथन, में एक टुपलेट डेटाटाइप भी शामिल है, जो कि थोड़ा सा पढ़ने का सुझाव देता है, मेरे लिए वैसे भी, टुपल्स टर्नरी डेटा के लिए उपयुक्त हैं। या संभावित रूप से एक टपल इंडेक्स का मूल्य उपयोग-केस के लिए स्टोर करने के लिए डेटा होगा और टपल एक स्थिरांक की तरह अधिक होगा। सूचकांक द्वारा वैश्विक, या यहाँ तक कि स्थानीय स्थिरांक का संदर्भ देने के बारे में कुछ ऐसा लगता है, जब तक कि आप विलासिता को प्रतिबंधित करने वाली बाधाओं के अधीन नहीं हैं।
थोरसुमोनर

2
एक टपल एक डेटाटाइप है जो कई तत्वों को संग्रहीत कर सकता है, एक संरचना की तरह, केवल गतिशील रूप से परिभाषित। तो यह ओपी के प्रकार के 3 चर को स्टोर करेगा। यह उस सामग्री पर प्रतिबंध प्रदान करने की सेवा नहीं करता है जिसे वह चाहता था।
gbjbaanb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.