2012-02-01 16 views
9

मैं जानना चाहता हूं, सी # में स्ट्रिंग की तुलना करते समय? कौन सी विधि उपयोग करने के लिए उपयुक्त है और क्यों?सी #: तुलनात्मक (स्ट्रिंग) और बराबर (स्ट्रिंग) के बीच क्या अंतर है?

CompareTo() या Equals()?

उत्तर

16

के मामले में Equals निर्धारित करना संभव है:

string.CompareTo:

एक निर्धारित उद्देश्य के साथ इस उदाहरण की तुलना या स्ट्रिंग और एक रिटर्न पूर्णांक जो इंगित करता है कि यह उदाहरण पहले, निम्न, या निर्दिष्ट ऑब्जेक्ट के रूप में सॉर्ट ऑर्डर में समान स्थिति में दिखाई देता है या नहीं या स्ट्रिंग।

string.Equals:

तय करता है कि दो स्ट्रिंग वस्तुओं एक ही मूल्य है।

संक्षेप में, CompareTo सॉर्टिंग के लिए उपयोग किया जाता है। Equals समानता निर्धारित करने के लिए प्रयोग किया जाता है।

14

CompareTo() आपको यह बताती है, और अगर, एक अधिक से अधिक/अन्य की तुलना में कम है, जबकि Equals() बस आपको बताता है कि अगर वे बराबर मान हैं।

यदि आप सभी जानना चाहते हैं कि "वे एक ही मूल्य हैं", तो आप Equals() का उपयोग करते हैं। आप यह भी जानना चाहते हैं कि वे कैसे तुलना की जरूरत है, CompareTo()

int a = 50; 
int b = 10; 

//if you need to know if they are equal: 
if(a.Equals(b)){ 
    //won't execute 
} 

//this would check if they are equal, as well 
if(a.CompareTo(b) == 0){ 
    //won't execute 
} 

//if you need to know if a is bigger than b, specifically: 
if(a.CompareTo(b) > 0){ 
    //will execute 
} 

//this would check to see if a is less than b 
if(a.CompareTo(b) < 0){ 
    //won't execute 
} 

अंत में उपयोग करते हैं,,, ध्यान दें कि इन Equals() और CompareTo() तरीकों सख्ती से int तरह आदिम प्रकार के लिए आवश्यक नहीं कर रहे हैं तो आप कर सकता है क्योंकि मानक तुलना ऑपरेटरों अतिभारित रहे हैं इन:

//this would check if they are equal, as well 
if(a == b){ 
    //won't execute 
} 

//if you need to know if a is bigger than b, specifically: 
if(a > b){ 
    //will execute 
} 

//this would check to see if a is less than b 
if(a < b){ 
    //won't execute 
} 

अंत में, आप अपने प्रश्न में string उल्लेख किया है। Equals() और CompareTo() काम जैसा कि मैंने string के लिए भी वर्णन किया है। बस 'तुलना' को ध्यान में रखें कि CompareTo() तारों पर करता है वर्णमाला क्रमबद्ध पर आधारित है, इसलिए "abcdefg" < "z"

+0

thx से है! इसलिए यदि हम सिर्फ यह देखना चाहते हैं कि वे एक ही मूल्य हैं, तो Equals() का उपयोग करें तुलनात्मक() से बेहतर प्रदर्शन करेगा? सलाह क्या है। बराबर का उपयोग करने के लिए? –

+2

मुझे लगता है कि * कुछ छोटे प्रदर्शन अंतर हो सकता है, मुझे लगता है। अगर आपको समानता जानने की जरूरत है, हाँ; 'बराबर()' का उपयोग करें। 'ए। एक्वाल्स (बी) 'की जांच करने के लिए आपके कोड में यह और भी स्पष्ट है। ए। कॉम्पारे (बी) == 0' –

+1

वास्तविक लाभ यह है कि ऑब्जेक्ट्स' तुलनात्मक विधि 'प्रदान नहीं करते हैं। 'बराबर' हमेशा वहां रहेगा, क्योंकि यह आधार 'ऑब्जेक्ट' वर्ग द्वारा प्रदान किया जाता है। –

4

Equals समानता के लिए एक बूलियन लौटाएगा।

CompareTo "से कम" के लिए -1 (या किसी अन्य नकारात्मक मूल्य) के साथ -1 (या किसी अन्य नकारात्मक मूल्य) के साथ, "बराबर" के लिए 0 (या किसी भी अन्य सकारात्मक मूल्य) के साथ एक int वापस करेगा। यह विधि एल्गोरिदम को सॉर्ट करने के लिए उपयोगी है।

5

CompareTo में कार्यक्षमता वास्तव में Equals की कार्यक्षमता का एक सुपरसेट है। CompareTo फ़ंक्शन ऑर्डरिंग, पहले, बाद या बराबर करता है जबकि Equals फ़ंक्शन केवल समानता को निर्देशित करता है। इसलिए यह वास्तव में MSDN से CompareTo

public bool Equals(string other) { 
    return 0 == CompareTo(other); 
} 
+0

हालांकि एक आम मामला, यह हमेशा मामला नहीं है। एक सामान्य उदाहरण यह है कि 'तुलनात्मक()' ऑर्डर निर्धारित करने के लिए केवल ऑब्जेक्ट का नाम जांचता है जबकि 'बराबर()' अन्य फ़ील्ड भी देख सकता है। [एमएसडीएन] से (http://msdn.microsoft.com/en-us/library/system.icomparable (v = vs.110) .aspx): "यह वर्तमान उदाहरण सॉर्ट ऑर्डर में उसी स्थिति में होता है जैसे कि तुलनात्मक विधि द्वारा निर्दिष्ट वस्तु। " - यह नहीं कहता कि वस्तु बराबर है। – larsmoa

0

तुलना करें विधि स्ट्रिंग ऑब्जेक्ट के पैरामीटर के साथ ऑब्जेक्ट के उदाहरण की तुलना कर रही है। बराबर विधि निर्धारित करती है कि दोनों का मान समान है या नहीं।

तुलना करें जब आप दो ऑब्जेक्ट्स मानों की तुलना कर रहे हों तो तुलना करें।

String str1 = "abc"; 
String str2 = "def" 
if(strq.CompareTo(str2) // 

बराबर है जब या तो एक या दोनों ऑब्जेक्ट नहीं है किया जाना चाहिए।

string str1 = "abc"; 
if(str1.Equals("abc") // 

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

0

समानता तुलना की तुलना में समानता "fussier" हो सकती है, लेकिन इसके विपरीत नहीं। compareTo कह सकते हैं "सभी वस्तुओं के बराबर हैं" जबकि बराबर कहते हैं, "लेकिन कुछ दूसरों की तुलना में अधिक के बराबर हैं!"

इस का एक उदाहरण System.String है। स्ट्रिंग की बराबर विधि और == ऑपरेटर औपचारिक तुलना का उपयोग करें, जो प्रत्येक वर्ण के यूनिकोड बिंदु मानों की तुलना करता है। इसकी तुलना करने के लिए विधि, हालांकि, कम उदार संस्कृति-निर्भर तुलना का उपयोग करता है। उदाहरण के लिए, अधिकांश कंप्यूटर, उदाहरण के लिए, स्ट्रिंग्स "ṻ" और "ǖ" के अनुसार भिन्न हैं, लेकिन तुलनात्मक के अनुसार समान हैं।

यह C# in a nutshell

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