2013-02-19 26 views
16

मेरे पास स्ट्रिंग तुलना बनाम चरित्र तुलना से संबंधित एक प्रश्न है।व्यक्तिगत वर्णों की स्ट्रिंग तुलना और वर्णमाला क्रम

अक्षरों > और 0 (शून्य) के अनुसार निम्नलिखित दशमलव मान 62 और 48 हैं।

जब मैं निम्नलिखित कोड में दो पात्रों की तुलना, मैं मूल्य True (जो सही है)

Console.WriteLine('>' > '0'); 

जब मैं निम्नलिखित कोड में दो एक चरित्र तार की तुलना मिलता है, मैं मूल्य -1 जो कि इंगित करता है मिल ">" से "0" (डिफ़ॉल्ट संस्कृति अंग्रेजी है) में कम है

Console.WriteLine(string.Compare(">", "0")); 

"3" और "1" (51 और 49 कोड valu के तुलना जबकि ते) निम्न कोड में देता 1 (अपेक्षित रूप से)

Console.WriteLine(string.Compare("3", "1")); 

इसके अलावा, string.Compare(string str1, string str2) प्रलेखन कहते हैं:

तुलना में इस तरह के आवरण नियमों और के रूप में संस्कृति विशिष्ट जानकारी प्राप्त करने के वर्तमान संस्कृति का उपयोग करता है के वर्णमाला क्रम

क्या आप समझा सकते हैं (या कुछ दस्तावेज के संदर्भ प्रदान करते हैं) कैसे ट्रिंग तुलना लागू की गई है उदा। कैसे व्यक्तिगत पात्रों के वर्णमाला क्रम की गणना आदि है?

उत्तर

14

पढ़ते हैं तो यह अर्थपूर्ण रूप से थोड़ा उलझन में है जब आप '>' और '0' वर्णों की तुलना करते हैं, तो आप उनके सामान्य मानों की तुलना कर रहे हैं।

Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal)); 
    Console.WriteLine(string.Compare(">", "0", StringComparison.InvariantCulture)); 
    Console.WriteLine(string.Compare(">", "0", StringComparison.CurrentCulture)); 

वर्तमान संस्कृति डिफ़ॉल्ट रूप से प्रयोग किया जाता है, जो एक छँटाई आदेश इरादा नहीं बल्कि में तार सुलझाने के लिए 'वर्णानुक्रम' है:

एक स्ट्रिंग तुलना से समान व्यवहार प्राप्त करने के लिए, क्रमसूचक स्ट्रिंग तुलना प्रकार की आपूर्ति वर्णानुक्रम की कुछ परिभाषाओं के लिए सख्ती से व्याख्यात्मक क्रम।

0

यह -1 देता है क्योंकि यह str2 से str1 की तुलना कर रहा है, दूसरी तरफ नहीं। उदाहरण के लिए, "48 बराबर 62 है"। नहीं, यह 62 से कम है इसलिए यह -1 लौटाता है। जब आप पैरामीटर ऑर्डर

+0

[MSDN] (http://msdn.microsoft.com/en-us/library/84787k22.aspx) कहते हैं, "String.Compare (Stra, STRB) - शून्य से भी कम - Stra कम है strB से। " उदाहरण के लिए, 'string.compare ("ए", "बी")' रिटर्न '-1' -' "ए" '' "बी" से कम है। '"> "' '" से कम क्यों है? – dtb

+0

मैंने अपना प्रश्न अपडेट कर लिया है: जब आप "3" से "1" की तुलना करते हैं तो आपको मान '1' मिलता है जहां" 3 "कोड 51 है और" 1 "में कोड 49 (अपेक्षित) है। तो यह आपके स्पष्टीकरण से मेल नहीं खाता है। – Alexandar

+0

@Alexandar अच्छा बिंदु। मुझे लगता है कि पीटकिर्कम ने – DiskJunky

17

तारों का क्रम क्रम आपके द्वारा उपयोग की जाने वाली संस्कृति पर निर्भर करता है। इस प्रकार

' - ! " # $ % & () * , ./: ; ? @ [ 
\ ]^_ ` { | } ~ + <=> 0 1 2 3 4 5 6 
7 8 9 a A b B c C d D e E f F g G h H i 
I j J k K l L m M n N o O p P q Q r R s 
S t T u U v V w W x X y Y z Z 

StringComparer.Ordinal प्रकार एक ही तार:

! " # $ % & ' () * + , - ./0 1 2 3 
4 5 6 7 8 9 : ; <=> ? @ A B C D E F G 
H I J K L M N O P Q R S T U V W X Y Z [ 
\ ]^_ ` a b c d e f g h i j k l m n o 
p q r s t u v w x y z { | } ~ 
+5

से बेहतर जवाब दिया है, आप हमें सूचित करने में असफल रहते हैं कि आपकी वर्तमान संस्कृति क्या है, और यह शर्म की बात है। मैं कह सकता हूं कि यह '" एफई-एनएल "' (पश्चिमी फ़्रिसियाई (नीदरलैंड) नहीं है), क्योंकि तब पत्र 'वाई' 'i' के बगल में होगा। इसके अलावा, यह 'et-EE" '(एस्टोनियन (एस्टोनिया) नहीं हो सकता है), तब 'z'' s' के बगल में होगा। –

+0

उपयोगकर्ता डीटीबी एसओ प्रोफाइल के अनुसार जर्मनी में स्थित है। –

2

यह आप क्या चाहते हैं की तरह लगता है की तुलना है

StringComparer.CurrentCulture के रूप में मेरे मशीन पर इस प्रकार निम्नलिखित 1-चरित्र तार सॉर्ट करता संस्कृति-विशिष्ट नियमों का उपयोग न करें। क्या आपने स्ट्रिंग कॉम्परिसन की कोशिश की है।क्रमवार:

Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal)); // returns a positive number