2011-09-27 13 views
81

मैं संस्करण संख्याओं की तुलना किस प्रकार का उपयोग किए बिना तुलना संस्करण संख्याओं?विभाजन समारोह

उदाहरण के लिए:

एक्स = 1.23.56.1487.5

y = 1.24.55.487.2

+4

आप परिणाम क्या चाहते हैं? – BoltClock

+3

5 भागों के साथ एक संस्करण? यदि आप ठेठ 4 भाग संस्करण का उपयोग कर रहे थे तो आप सिस्टम.विर्सन क्लास का उपयोग कर सकते हैं, जिसमें संस्करणों की तुलना करने के लिए विधियां शामिल हैं और संस्करण स्ट्रिंग – psousa

+1

का विश्लेषण करें x और y के प्रकार क्या हैं? – Gleno

उत्तर

193

आप संस्करण वर्ग का उपयोग कर सकते हैं?

http://msdn.microsoft.com/en-us/library/system.version.aspx

यह एक IComparable इंटरफ़ेस है। ध्यान रखें कि यह आपके द्वारा दिखाए गए 5-भाग संस्करण स्ट्रिंग के साथ काम नहीं करेगा (क्या वास्तव में आपका संस्करण स्ट्रिंग है?)। आपके इनपुट मान लिया जाये कि तार कर रहे हैं, यहाँ सामान्य नेट 4-भाग संस्करण स्ट्रिंग के साथ एक काम कर नमूना है:

static class Program 
{ 
    static void Main() 
    { 
     string v1 = "1.23.56.1487"; 
     string v2 = "1.24.55.487"; 

     var version1 = new Version(v1); 
     var version2 = new Version(v2); 

     var result = version1.CompareTo(version2); 
     if (result > 0) 
      Console.WriteLine("version1 is greater"); 
     else if (result < 0) 
      Console.WriteLine("version2 is greater"); 
     else 
      Console.WriteLine("versions are equal"); 
     return; 

    } 
} 
+3

सिर्फ अगर संस्करण 2-4 भागों – username

+0

@dev_Boston केवल एक अपवाद से होते हैं ... बस ये मान v1 = 1.0001 के साथ क्या और v2 = 1.1 .it मुझे बराबर देता है। –

+7

हां, संस्करण स्ट्रिंग्स दशमलव स्ट्रिंग्स नहीं हैं, और संस्करण संख्या के किसी हिस्से में प्रीपेड शून्य शून्य अप्रासंगिक है। दूसरे शब्दों में, "00001" संस्करण स्ट्रिंग के दूसरे भाग में "1" के बराबर है। :) नेट में काम करता है gr8 – JohnD

8

आप major.minor.build.revision योजना के साथ रह सकते हैं आप नेट Version वर्ग इस्तेमाल कर सकते हैं । अन्यथा आपको बाएं से दाएं तक किसी प्रकार का पार्सिंग लागू करना होगा और जब तक आप कोई अंतर न करें या दो संस्करण बराबर न हों, तब तक जारी रहना होगा। > पूर्णांक रूपांतरण ब्लोट -

4
public int compareVersion(string Version1,string Version2) 
    { 
     System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"([\d]+)"); 
     System.Text.RegularExpressions.MatchCollection m1 = regex.Matches(Version1); 
     System.Text.RegularExpressions.MatchCollection m2 = regex.Matches(Version2); 
     int min = Math.Min(m1.Count,m2.Count); 
     for(int i=0; i<min;i++) 
     { 
      if(Convert.ToInt32(m1[i].Value)>Convert.ToInt32(m2[i].Value)) 
      { 
       return 1; 
      } 
      if(Convert.ToInt32(m1[i].Value)<Convert.ToInt32(m2[i].Value)) 
      { 
       return -1; 
      }    
     } 
     return 0; 
    } 
+5

सावधान रहें कि यह 'तुलनावर्सन ("1.3", "1.3.1") के बराबर बराबर होगा –

0

@JohnD के अलावा '(।') अन्य स्ट्रिंग < या रों जवाब स्प्लिट का उपयोग किए बिना केवल आंशिक संस्करण संख्याओं की तुलना करने की जरूरत हो सकती है '। मैंने 1 अतिरिक्त तर्क के साथ एक विस्तार विधि CompTo लिखा है - तुलना करने के लिए संस्करण संख्या के महत्वपूर्ण हिस्सों की संख्या (1 और 4 के बीच)।

public static class VersionExtensions 
{ 
    public static int CompareTo(this Version version, Version otherVersion, int significantParts) 
    { 
     if(version == null) 
     { 
      throw new ArgumentNullException("version"); 
     } 
     if(otherVersion == null) 
     { 
      return 1; 
     } 

     if(version.Major != otherVersion.Major && significantParts >= 1) 
      if(version.Major > otherVersion.Major) 
       return 1; 
      else 
       return -1; 

     if(version.Minor != otherVersion.Minor && significantParts >= 2) 
      if(version.Minor > otherVersion.Minor) 
       return 1; 
      else 
       return -1; 

     if(version.Build != otherVersion.Build && significantParts >= 3) 
      if(version.Build > otherVersion.Build) 
       return 1; 
      else 
       return -1; 

     if(version.Revision != otherVersion.Revision && significantParts >= 4) 
      if(version.Revision > otherVersion.Revision) 
       return 1; 
      else 
       return -1; 

     return 0; 
    } 
} 
संबंधित मुद्दे