2008-10-09 12 views
19

उपयोग करने के लिए अगर मैं एक केस-संवेदी स्ट्रिंग-बंद शब्दकोश, StringComparer का कौन सा संस्करण मैं इन बाधाओं को देखते हुए उपयोग किसे करना चाहिए करना चाहते हैं:कौन सा StringComparer के संस्करण

  • शब्दकोश में कुंजी या तो सी # कोड से लिया या config फ़ाइलों अंग्रेज़ी लोकेल केवल (या तो अमेरिका या ब्रिटेन)
  • सॉफ्टवेयर अंतर्राष्ट्रीय है और विभिन्न स्थानों
  • में चलेंगे में लिखा

मैं सामान्य रूप से StringComparer.InvariantCultureIgnoreCase उपयोग करते हैं लेकिन यकीन नहीं था कि अगर सही है मामला।

Dictionary< string, object> stuff = new Dictionary< string, object>(StringComparer.InvariantCultureIgnoreCase); 

उत्तर

11

This MSDN article सब कुछ आप संभवतः तुर्की मैं इस समस्या सहित महान गहराई, में जानना चाहता हूँ सकता है शामिल हैं।

कुछ समय हो गया है क्योंकि मैंने इसे पढ़ा है, इसलिए मैं फिर से ऐसा करने के लिए बंद हूं। आपको एक घंटे में मिलते हैं!

1

के बाद से चाबियाँ, अपने ज्ञात तय मान रहे हैं तो या तो InvariantCultureIgnoreCase या OrdinalIgnoreCase काम करना चाहिए: यहाँ उदाहरण कोड है। संस्कृति-विशिष्ट से बचें, या आप "तुर्की i" समस्या जैसी कुछ और "मजेदार" चीज़ों को हिट कर सकते हैं। जाहिर है, यदि आप सुसंस्कृत मूल्यों की तुलना कर रहे थे तो आप एक सुसंस्कृत तुलनाकर्ता का उपयोग करेंगे ... लेकिन ऐसा लगता है कि आप नहीं हैं।

3

"केस असंवेदनशील" की अवधारणा एक भाषाई है, और इसलिए यह संस्कृति के बिना समझ में नहीं आता है।

अधिक जानकारी के लिए यह blog देखें।

यह कहा गया कि यदि आप सिर्फ लैटिन वर्णमाला का उपयोग करके तारों के बारे में बात कर रहे हैं तो आप शायद इनवेरिएंटकल्चर से दूर हो जाएंगे।

हालांकि स्ट्रिंगकॉम्पियर के साथ शब्दकोश बनाना संभवतः सबसे अच्छा है। कंटेंटकल्चर, हालांकि। यह उदाहरण के लिए, जर्मन संस्कृति के तहत "ß" को आपके शब्दकोश में "एसएस" से मिलान करने की अनुमति देगा।

1

StringComparer.OrdinalIgnoreCase InvariantCultureIgnoreCase FWIW की तुलना में थोड़ा तेज है (MSDN के अनुसार "एक क्रमसूचक तुलना में तेजी से है, लेकिन संस्कृति-संवेदी"।

आप के अंतर नोटिस करने के लिए तुलना की एक बहुत कुछ कर किया होगा पाठ्यक्रम।

0

अपरिवर्तनीय संस्कृति विशेष रूप से मौजूद है तार है कि कार्यक्रम के लिए आंतरिक रहे हैं और उपयोगकर्ता डेटा या यूआई के साथ कुछ नहीं करना से निपटने के लिए। ऐसा लगता है कि यह इस स्थिति के लिए मामला है।

27

वहाँ तीन हैं तुलनाकर्ताओं के प्रकार:

  • संस्कृति के बारे में पता
  • संस्कृति अपरिवर्तनीय
  • क्रमसंख्या

प्रत्येक comparer एक केस-संवेदी के साथ ही एक केस-संवेदी संस्करण है।

एक ordinal तुलनाकर्ता वर्णों के क्रमिक मानों का उपयोग करता है। यह सबसे तेज़ तुलनाकर्ता है, इसका उपयोग आंतरिक उद्देश्यों के लिए किया जाना चाहिए।

संस्कृति-जागरूक तुलनाकर्ता वर्तमान धागे की संस्कृति के लिए विशिष्ट पहलुओं को मानता है। यह "तुर्की मैं", "स्पेनिश एलएल", आदि समस्याओं को जानता है। इसका उपयोग यूआई तारों के लिए किया जाना चाहिए।

संस्कृति invariant तुलनाकर्ता वास्तव में परिभाषित नहीं किया गया है और अप्रत्याशित परिणाम उत्पन्न कर सकता है, और इस प्रकार कभी भी इसका उपयोग नहीं किया जाना चाहिए।

संदर्भ

  1. New Recommendations for Using Strings in Microsoft .NET 2.0
+0

जो अच्छा और प्यारा था। एक मामला जहां मैं परिवर्तनीय संस्कृति पसंद करता हूं डीबी में देख रहे हैं .. – nawfal

0

सिस्टम। चयन। विशेषीकृत स्ट्रिंग डिक्शनरी शामिल है। MSDN के रिमार्क्स खंड में कहा गया है "एक प्रमुख रिक्त नहीं हो सकता है, लेकिन एक मूल्य के कर सकते हैं

कुंजी एक केस-संवेदी ढंग से नियंत्रित किया जाता है;। यह इससे पहले कि यह स्ट्रिंग शब्दकोश के साथ प्रयोग किया जाता है लोअरकेस अनुवाद किया है

.NET Framework संस्करण 1.0 में, यह वर्ग संस्कृति-संवेदनशील स्ट्रिंग तुलना का उपयोग करता है। हालांकि, .NET Framework संस्करण 1.1 और बाद में, यह वर्ग स्ट्रिंग की तुलना करते समय CultureInfo.InvariantCulture का उपयोग करता है। इस बारे में अधिक जानकारी के लिए कि संस्कृति तुलना और सॉर्टिंग को कैसे प्रभावित करती है, एक विशिष्ट संस्कृति और प्रदर्शन संस्कृति-असंवेदनशील स्ट्रिंग संचालन के लिए डेटा की तुलना और छंटनी देखें।

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