2009-11-19 5 views
5

क्या किसी को स्ट्रिंग में कई प्राचीन प्रकारों (जैसे पूर्णांक, फ्लोट्स, स्ट्रिंग्स इत्यादि) एन्कोडिंग के लिए लाइब्रेरी के बारे में पता है लेकिन lexicographical order प्रकारों को संरक्षित करता है?लेक्सिकोग्राफिक ऑर्डर को संरक्षित करने वाले आदिम प्रकारों की स्ट्रिंग एन्कोडिंग

आदर्श रूप से, मैं एक सी ++ लाइब्रेरी की तलाश में हूं, लेकिन अन्य भाषाएं भी ठीक हैं। साथ ही, कोई यह मान सकता है कि स्वरूप को स्ट्रिंग में एन्कोड करने की आवश्यकता नहीं है (यानी, यदि यह int64/string/float है तो एन्कोडेड स्ट्रिंग को इस जानकारी को एन्कोड करने की आवश्यकता नहीं है, केवल डेटा एन्कोडिंग पर्याप्त है)।

+0

आप स्पष्ट कर सकते हैं कि आप क्या करना चाहते हैं? –

+1

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

+0

लेक्सिकोोग्राफिक क्रम से मेरा मतलब है, आदिम प्रकारों का मूल क्रम (स्ट्रिंग नहीं, स्पष्ट रूप से)। कहें, "(ए, बी, सी)" को स्ट्रिंग "एस" में एन्कोड करें, जैसे कि "(ए, बी, सी) <(ए ', बी', सी ')" का अर्थ है कि "एस <एस' "सभी के लिए, बी, सी। – nilton

उत्तर

0

केवल प्रमुख शून्यों के साथ एक निश्चित कॉलम चौड़ाई में संख्यात्मक मान लिखें, और स्ट्रिंग सामान्य के रूप में लिखें। तो इस तरह:

0.1 -> 0000000.1000000 
123 -> 0000123.0000000 
foo -> foo 
X -> X 

तो फिर तुम पाठ (जैसे यूनिक्स sort-n के बिना) के रूप में सॉर्ट कर सकते हैं। उस के बारे में कैसा है?

+0

मैं निश्चित चौड़ाई में एन्कोडिंग संख्या से बचना चाहता हूं। साथ ही, एन्कोडिंग स्ट्रिंग्स स्वयं काम नहीं करेंगे, अगर स्ट्रिंग में एक ही वर्णक है जिसे आप विभाजक के रूप में उपयोग कर रहे हैं तो सही सॉर्टिंग ऑर्डर दें। – nilton

+0

फिर अपना खुद का सॉर्ट दिनचर्या लिखें। –

9

इस पेपर ("संख्याओं के कुशल लेक्सिकोग्राफिक एन्कोडिंग") पर एक नज़र डालें जो दिखाता है कि स्ट्रिंग के रूप में किसी भी संख्यात्मक प्रकार का प्रतिनिधित्व कैसे किया जाता है जैसे स्ट्रिंग्स का लेक्सिकोग्राफिक ऑर्डर अंतर्निहित संख्याओं के संख्यात्मक क्रम के समान होता है। यह मनमाना लंबाई संख्या के साथ copes।

http://www.zanopha.com/docs/elen.pdf

+0

दिलचस्प ... मैं कागज पर एक नज़र डाल रहा हूँ। – nilton

+2

बस इसे लागू किया। काम करता है एक मामूली संशोधन प्रदान किया। ASCII '+ '' वर्ण में पूर्णांक मान 43 है, जो कम है और' 0'' (पूर्णांक मान 48) है। यह गलत सॉर्टिंग अर्थशास्त्र प्रदान करता है। एएससीआईआई विमान में ऊपर वर्णित एक चरित्र का उपयोग करके, '' = ''(पूर्णांक मान 61) अलग-अलग उपसर्ग वर्णों के साथ स्ट्रिंग की तुलना करते समय भी सही परिणाम देता है। –

2

मैं तार जो आदेश को बचाने के लिये पूर्णांकों और देशांतर परिवर्तित करने की समस्या थी। और जब से मैं जावा में काम कर रहा था, मैंने केवल हस्ताक्षर किए थे।

मेरे एल्गोरिथ्म बहुत आसान था:

  1. फ्लिप संकेत बिट (toEncode^Long.MAX_VALUE देशांतर के लिए) अन्यथा ऋणात्मक संख्याओं सकारात्मक संख्या से अधिक है।
  2. बाइट्स के संशोधित बेस 64 एन्कोडिंग करें। दुर्भाग्य से, सामान्य बेस 64 एन्कोडिंग ऑर्डरिंग को सुरक्षित नहीं रखता है; विशेष वर्ण (+ और /) वर्णों के बाद संख्याओं के बाद हैं। यह ASCII से पूरी तरह पीछे है। मेरा संशोधित एन्कोडिंग बस ASCII ऑर्डरिंग का उपयोग करता है। (यह स्पष्ट यह सामान्य base64 नहीं था बनाने के लिए, मैं गद्दी के रूप में ~ साथ - और _ करने के लिए विशेष वर्ण बदल दिया है। ये अभी भी एक यूआरएल है, जो एक और एक बाधा मैं था भीतर useable रहे हैं।)
2

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

देखें "प्रश्न 201: टिप्स और ट्रिक्स अमेज़न SimpleDB क्वेरी के लिए" - http://aws.amazon.com/articles/1232

http://typica.s3.amazonaws.com/com/xerox/amazonws/sdb/DataUtils.html

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