2011-09-13 12 views
5

मैं हेक्साडेसिमल मानों की एक जोड़ी को स्टोर करने के लिए एक सूची का उपयोग कर रहा हूं (उदाहरण के लिए सूची AD38F2D8 में, जैसा कि प्रदर्शित किया गया है: Value_A: AD 38 F2 D8)।सी # शब्दकोश या सिर्फ सूचियों का उपयोग करते रहें?

मेरा प्रश्न है कि मुझे Dictionary<string, string> का उपयोग करना चाहिए या क्या मुझे हेक्साडेसिमल स्ट्रिंग को तारों की एक जोड़ी के रूप में स्टोर करने के लिए Dictionary<string, NewCustomObject> का उपयोग करना चाहिए। (मूल्य: [एडी, 38, एफ 2, डी 8]) के बजाय (मूल्य: AD38F2D8)।

यह संभवतः दोनों के बीच एक अंतर नहीं बनायेगा।

Dictionary<string, string> के साथ मैं सिर्फ शब्दकोश में प्रत्येक हेक्स स्ट्रिंग की दुकान, और फिर उनके संबंधित जोड़ों में उन्हें विभाजित जब मैं उन्हें आवश्यकता होगी। यदि मैं Dictionary<string, NewCustomObject> का उपयोग करता हूं तो मैं पहले अपने जोड़ों में हेक्स स्ट्रिंग को विभाजित करता हूं और फिर उन्हें शब्दकोश में संग्रहीत करता हूं।

मेरा प्रश्न है जिसका उपयोग मैं करूँ? या मुझे सिर्फ सूचियों का उपयोग करना चाहिए?

Dictionary<string, string> का उपयोग करने के लिए यह पूरी तरह से जरूरी नहीं है क्योंकि मुझे अभी भी पता चलेगा कि कौन सी अनुक्रमणिका स्ट्रिंग चालू है, बस यह अच्छी लगती है।

सूची उदाहरण:

Index = 0, Value = 3D95FF08 
Index = 1, Value = 8D932A08 

Dictionary<string, string> उदाहरण:

Index = 0, Key = First, Value = 3D95FF08 
Index = 1, Key = Second, Value = 8D932A08 

Dictionary<string, NewCustomObject> उदाहरण:

Index = 0, Key = First, Value = 3D, 95, FF, 08 
Index = 1, Key = Second, Value = 8D, 93, 2A, 08 

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

मैं यहां अंतिम शब्दकोश स्ट्रिंग में आया: C# Dictionary with two Values per Key? मैं इसे खोज रहा था क्योंकि मैंने पाइथन कोड लिखते समय कई बार इस तरह उपयोग किया है। एक शब्दकोश के भीतर तारों की एक सूची संग्रहित करके।

किसी भी मदद के लिए अग्रिम धन्यवाद!

संपादित

या तो सूची या शब्दकोश में प्रत्येक स्ट्रिंग, उनके संबंधित बाइट में विभाजित किया गया। ईजी।

इसलिए Memb_Number_ID, अगर मैं उन्हें अलग संभवतः में इन डालने से पहले:

BYTE 0 1 2 3 to 6 ..... 
HEX AD 12 01 0000859D ..... 

बाइट 0 सूचकांक पकड़ होगा बाइट 1 संदर्भ बाइट 2 झंडे बाइट 3 से 6 पकड़ होगा शब्दकोश मुझे अपने संबंधित स्थान में उपयोग करने से पहले इसे करने की ज़रूरत नहीं है क्योंकि मुझे उन्हें इंडेक्स, संदर्भ और झंडे की गणना करने के लिए उन्हें विभाजित करना होगा।

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

Index Reference Link Flags   Memb_Number_ID 
173  18    +A    John (ID: 34205) 
+1

आप शब्दकोश में स्विच करने के बारे में क्यों सोचते हैं? सूचियों के साथ कोड काम नहीं कर रहा है? –

+0

यदि आप हमें बताते हैं कि आप संग्रह का उपयोग कैसे करना चाहते हैं, तो कोई सिफारिश के साथ कोड नमूना प्रदान करेगा। फिलहाल, आपने केवल हमें बताया है कि आप क्या स्टोर कर रहे हैं, न कि आप बाद में इसका उपयोग कैसे करना चाहते हैं। –

+0

सूचियों वाला कोड ठीक काम कर रहा है, मैं बस काम करने में आसान बनाने के लिए एक रास्ता तलाश रहा हूं। प्रत्येक हेक्साडेसिमल मान को डेटाबेस में 1 स्ट्रिंग के रूप में संग्रहीत किया जाता है, लेकिन जैसा कि समझाया गया है कि उस स्ट्रिंग के भीतर वर्णों के प्रत्येक सेट का अपना अर्थ है, इसलिए इसे विभाजित जोड़े के साथ एक शब्दकोश में डालने से जानकारी प्रदर्शित करने के लिए चीजों को आसान बना दिया जा सकता है। – Raskaroth

उत्तर

4

शब्दकोश अनुक्रमित का खुलासा नहीं करते हैं, वे अवधारणा नहीं है:

उपरोक्त उदाहरण

के रूप में outputted किया जाएगा। मैं एक सूची के साथ चिपके रहते हैं चाहते हैं:

List<NewCustomObject> myHexValues;

और यदि आप इसे माध्यम से खोज करने की जरूरत है, तो आप LINQ उपयोग कर सकते हैं। केवल परिभाषित कुंजी के आधार पर आपको तेजी से पहुंच की आवश्यकता होने पर शब्दकोशों का उपयोग करें।

आपने वास्तव में यह नहीं बताया है कि आप संग्रह का उपयोग कैसे करना चाहते हैं, इसलिए कोई भी वास्तव में आपको एक या दूसरे का उपयोग करने के लिए कह सकता है - मैं केवल इस तथ्य के आधार पर अनुमान लगा रहा हूं कि आप इंडेक्स मूल्य चाहते हैं।

अद्यतन: आप हेक्स मान के तत्वों के लिए आसान पहुँच चाहते हैं, तो आप एक rectangular array उपयोग कर सकते हैं या एक कस्टम प्रकार में मूल्य लपेट कर (बेनकाब विभिन्न भागों के लिए गुण struct पर अपनी पसंद बनाम class, निर्भर करता है मानों पर मुझे लगता है), और फिर उस प्रकार को एक सूची में चिपकाएं।

आप अपने खुद के प्रकार बनाने हैं, तो आप कर सकते हैं expose an indexer आप निम्न सिंटैक्स प्राप्त करना चाहते हैं तो:

myCustomType[indexKey] = value;

+0

वास्तव में सूची में corresponces दिखाने के लिए सूचकांक बस वहाँ है। मुझे इंडेक्स की आवश्यकता नहीं है। यह सिर्फ मैं ही myhexvalues ​​[0] या myhexvalues ​​[1] की तरह होगा। या शब्दकोश संबंधित विधि – Raskaroth

+0

@Raskaroth आप संग्रह का उपयोग कैसे करना चाहते हैं? एक पल के लिए अनदेखा करें कि आप अंततः किस संग्रह का उपयोग करेंगे। क्या आप महत्वपूर्ण जानकारी देना चाहते हैं या फिर से करना चाहते हैं? –

+0

यदि आप उन्हें "इंडेक्स" करना चाहते हैं, जैसा कि, उस मान का उपयोग करें जो शब्दकोश की "कुंजी" नहीं है, तो आप नहीं कर सकते हैं, आपको अनुक्रमणिका का उपयोग करने की आवश्यकता है। –

0

आप एक दूसरे से जुड़े दो (या अधिक) मूल्यों की जरूरत है, एक Tuple है जिसकी आपको जरूरत है। एक शब्दकोश अनावश्यक है क्योंकि आप लुकअप (कुंजी) के रूप में मानों में से किसी एक का उपयोग नहीं कर रहे हैं ... क्या आप हैं?

मुझे लगता है कि आप क्या स्थिति के आधार पर हैं, मैं कहूंगा कि टुपल्स का एक संग्रह (सूची ठीक काम करता है)।

इसके अलावा, आप स्ट्रिंग के रूप में हेक्स मान क्यों संग्रहीत कर रहे हैं? आप इसे एक पूर्णांक के रूप में छोड़ सकते हैं और हेक्साइडसिमल स्ट्रिंग के रूप में प्रदर्शित करने के लिए String.Format({0:X}, value); का उपयोग कर सकते हैं।

+0

क्योंकि शुरुआत में यह डेटाबेस में बाइनरी के रूप में संग्रहीत होता है, और मैं यहां वर्णित विधि का उपयोग करता हूं: http://stackoverflow.com/questions/6640898/c-asp-net-show-binary-data-from-डेटा। यह उस कोड की एक निरंतरता है, अभी यह है कि मैं इसे आगे बढ़ाने के लिए इसे विभाजित कर रहा हूं। यह काम करता है, लेकिन मैं एक और अधिक कुशल तरीका की तलाश में हूं। – Raskaroth

+0

और नहीं, मैं मूल्य को देखने के लिए कुंजी का उपयोग नहीं कर रहा हूं, मुझे जरूरी नहीं है। हालांकि, ट्यूपल के बारे में भूल गए, अनुस्मारक के लिए धन्यवाद! – Raskaroth

+0

टुपल काम नहीं करेगा, क्योंकि हेक्साडेसिमल मान दूसरे के बाद 1 संग्रहीत किए जाते हैं, इसलिए यदि मेरे पास उस डेटाबेस में 8 तार संग्रहीत हैं, और प्रत्येक स्ट्रिंग में हेक्साडेसिमल मानों के 8 जोड़े होते हैं। तो मेरे पास एक टुपल होगा: 8 * (8 * 2) = 128 मान। और मेरा डेटाबेस एक डेटाबेस मूल्य में हेक्साडेसिमल के 80 तारों को संग्रहीत करता है, कल्पना करें कि यह कितना बड़ा होगा? या मुझे 80 व्यक्तिगत टुपल को हेक्स मानों के 8 जोड़े के साथ बनाने की आवश्यकता होगी। – Raskaroth

0

हेक्स स्ट्रिंग को तुरंत पार्स क्यों नहीं करते हैं, तो आप इसे वास्तविक वस्तु में प्राप्त करते हैं? आपने दिखाया है कि ऑब्जेक्ट कैसा दिखता है (इंडेक्स, संदर्भ लिंक इत्यादि के साथ)। मैं इसे सीधे रिकॉर्ड ऑब्जेक्ट (या उस तरह कुछ) में सीधे पार्स करता हूं और फिर उन्हें एक सूची में संग्रहीत करता हूं। इस तरह से उन्हें हेक्स स्ट्रिंग या हेक्स स्ट्रिंग या सरणी के सरणी को संग्रहीत करने से अधिक सहज ज्ञान युक्त प्रारूप में होना बहुत आसान है ...

+0

डेटाबेस से 1 हेक्स स्ट्रिंग है जिसमें 80 स्ट्रिंग हैं, जिनमें 8 जोड़े हैं। यही कारण है कि मुझे कुछ और आसानी से प्रयोग करने की ज़रूरत है। – Raskaroth

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