2010-05-21 18 views
6

this question में मेरे उत्तर के लिए मुझे दो अक्षरों की तुलना करना है। मैंने सोचा कि सामान्य char.CompareTo() विधि मुझे CultureInfo निर्दिष्ट करने की अनुमति देगी, लेकिन ऐसा नहीं है।वर्णों की तुलना कैसे करें (संस्कृति का सम्मान करना)

तो मेरा सवाल है: मैं दो वर्णों की तुलना कैसे कर सकता हूं और तुलना के लिए एक संस्कृतिइन्फो निर्दिष्ट कर सकता हूं?

उत्तर

4

वहाँ वास्तव में की तुलना अक्षर और तार के बीच एक अंतर है। मुझे मूलभूत मुद्दे को समझाने की कोशिश करें, जो कि काफी सरल है: एक चरित्र हमेशा एक यूनिकोड बिंदु का प्रतिनिधित्व करता है। वर्णों की तुलना करना हमेशा कोड के अंकों की तुलना उनके समान अर्थ के रूप में किसी भी सम्मान के बिना करता है।

यदि आप समान अर्थ के लिए वर्णों की तुलना करना चाहते हैं, तो आपको एक स्ट्रिंग बनाने और वहां प्रदान की गई तुलना विधियों का उपयोग करने की आवश्यकता है। इनमें विभिन्न संस्कृतियों के लिए समर्थन शामिल है। गुफा के जवाब को कैसे करें इसे देखें।

1

मुझे लगता है कि सी # में वर्णों की तुलना करते समय CultureInfo मामलों को नहीं लगता है। char पहले से ही एक यूनिकोड चरित्र है इसलिए दो अक्षर आसानी से witohut CultureInfo की तुलना में आसानी से तुलना की जा सकती है।

+1

मुझे लगता है कि प्रश्न का लक्ष्य एक विशिष्ट संस्कृति में एक ही अर्थ के साथ विभिन्न यूनिकोड वर्णों के लिए समानता रखना है। उदाहरण के लिए, (मामले को अनदेखा करते समय) मैं और मैं ब्रिटेन में समान हैं, लेकिन तुर्की में नहीं। – mafu

+0

मुझे लगता है कि वह प्राकृतिक भाषा-पोर्सिंगिंग टाइपिंग टिगिंग की तलाश में है। –

+0

@ माफुटक्ट, @ थिस: हां, मैं उत्सुक हूं कि एक निश्चित संस्कृति (जैसे तुर्की में) के भीतर एक char की तुलना करने की संभावनाएं हैं। ऐसा लगता है कि जब मैं अक्षर और स्ट्रिंग में डाले गए दो वर्णों की तुलना करता हूं तो एक अंतर होता है। – tanascius

2

क्या आपने String.Compare विधि का प्रयास किया था?

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

String.Compare(str1, str2, false, new CultureInfo("en-US")) 
3

पात्रों के लिए कोई संस्कृति सक्षम तुलना नहीं है, तो आप तार करने के लिए वर्ण परिवर्तित करने के लिए इतना है कि आप उदाहरण के लिए String.Compare(string, string, CultureInfo, CompareOptions) विधि का उपयोग कर सकते हैं।

उदाहरण:

char a = 'å'; 
char b = 'ä'; 

// outputs -1: 
Console.WriteLine(String.Compare(
    a.ToString(), 
    b.ToString(), 
    CultureInfo.GetCultureInfo("sv-SE"), 
    CompareOptions.IgnoreCase 
)); 

// outputs 1: 
Console.WriteLine(String.Compare(
    a.ToString(), 
    b.ToString(), 
    CultureInfo.GetCultureInfo("en-GB"), 
    CompareOptions.IgnoreCase 
)); 
संबंधित मुद्दे