2010-04-12 14 views
6

इनपुट में नंबर सॉर्ट करने के लिए कैसे:अक्षरांकीय

SHC 111U, SHB 22x ,, SHA 5555G

जरूरत उत्पादन:

SHB 22X, SHC 111U, SHA 5555G

मुझे पार्किंग क्षेत्र में केवल Vehicle no क्रमबद्ध करना है pref ix और प्रत्यय पत्र

उत्तर

4

ऐसा करने के लिए अंतर्निहित कुछ भी नहीं है, लेकिन आप इसे पहले संख्याओं और सॉर्टिंग को निकालने के द्वारा कर सकते हैं। उदाहरण के लिए:

class VehicleNumberComparer : IComparer<string> 
{ 
    public int Compare(string lhs, string rhs) 
    { 
     var numExtract = new Regex("[0-9]+"); 
     int lhsNumber = int.Parse(numExtract.Match(lhs).Value); 
     int rhsNumber = int.Parse(numExtract.Match(rhs).Value); 
     return lhsNumber.CompareTo(rhsNumber); 
    } 
} 

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

+0

हमारे पास वही विचार था! आपने कोड लिखा है, इसलिए आपको एक उथल-पुथल मिलती है! – msarchet

+0

आपके सुझाव के लिए धन्यवाद, मैं – drop

+0

@ डीन हार्डिंग, + 1 विचार पर विचार करता हूं। – Hadas

0

यह करने के लिए इस

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

+0

धन्यवाद, मैं – drop

0

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

+0

धन्यवाद कर सकता हूं धन्यवाद, आपकी सहायता – drop

1

यदि कोई संख्या के बिना प्लेट रखना संभव है तो आपको इसकी जांच करनी चाहिए।

static int SortPlate(string plate) 
{ 
    int plateNumber; 
    Regex regex = new Regex(@"\d+"); 
    Int32.TryParse(regex.Match(plate).Value, out plateNumber); 

    return plateNumber; 
} 

static void Main(string[] args) 
{ 
    IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G", "HOT STUFF"}; 

    var sortedList = from z in data 
        orderby SortPlate(z) 
        select z; 

    foreach (string plate in sortedList) 
    { 
     Console.WriteLine(plate); 
    } 

} 

यदि यह बिल्कुल असंभव है और दुनिया के अंत से पहले आएगा वहाँ कभी संख्या के बिना एक थाली हो सकता है तो यह संक्षिप्त रूप से काम करेगा:

static void Main(string[] args) 
{ 
    IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G"}; 

    Regex regex = new Regex(@"\d+"); 
    var sortedList = from z in data 
        orderby Int32.Parse(regex.Match(z).Value) 
        select z; 

    foreach (string plate in sortedList) 
    { 
     Console.WriteLine(plate); 
    } 

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