2011-11-16 17 views
6

क्या कोई .NET बिल्ड-इन विधि है जो मेरे परिदृश्य को हल करेगी?सी # - अन्य स्ट्रिंग द्वारा स्ट्रिंग सॉर्टिंग सहायक के रूप में

  1. स्ट्रिंग्स पूर्व की एक सरणी मिली। { "Mark", "Tom", "Mat", "Mary", "Peter" }
  2. मैं स्ट्रिंग "Ma" का उपयोग स्ट्रिंग सहायक छँटाई
  3. मेरे सरणी परिणाम के रूप में { "Mark", "Mary", "Mat", "Tom", "Peter" }

मुझे लगता है कि समारोह इस सुलझाने आसान होगा पता है, लेकिन I'am रुचि इस तरह के विधि मौजूद है।

पीएस। .NET 4.0

+0

तार जो मिलान करने वाले इंडेक्स को सॉर्ट करने की आवश्यकता है। अन्य तारों के बारे में क्या, जिसमें मेलिंग स्ट्रिंग नहीं है? यदि आप चाहते हैं, तो आप सभी मिलान करने वाली स्ट्रिंग को फ़िल्टर कर सकते हैं और उन्हें सॉर्ट कर सकते हैं और आखिरकार शेष तत्वों के साथ सूची जोड़ सकते हैं। –

+0

उन तत्वों को सॉर्ट करने का क्या फायदा है जो केवल निर्दिष्ट उपसर्ग से मेल खाते हैं जबकि अन्य तत्वों को उनके मूल सापेक्ष क्रम में छोड़ते हैं? सॉर्ट किए गए तत्व हमेशा शुरुआत में खत्म होते हैं? –

+0

गृहकार्य, यदि हां, तो कृपया इसे टैग करें। –

उत्तर

17

.NET 3.5 (और ऊपर) का उपयोग OrderByDescending औरलिंक में 10 विधियां जो भी आप चाहते हैं वह करने में सक्षम होंगे। उदाहरण:

var ordered = strings.OrderByDescending(s => s.StartsWith("Ma")).ThenBy(s => s); 
+0

शानदार: ऊपर उठाया !! – Marco

+0

Thx exacly जो मैं चाहता था :) – EOG

+0

यह एक linq-fu मजबूत है। +1 – ddysart

1

का उपयोग करना मुझे लगता है कि विधि मौजूद नहीं है।
मैं इस के साथ हल:

public static string[] Sort(this string[] list, string start) 
{ 
    List<string> l = new List<string>(); 
    l.AddRange(list.Where(p => p.StartsWith(start)).OrderBy(p => p)); 
    l.AddRange(list.Where(p => !p.StartsWith(start)).OrderBy(p => p)); 
    return l.ToArray(); 
} 

तो तुम

string[] list = new string[] { "Mark", "Tom", "Mat", "Mary", "Peter" }; 
string[] ordered_list = list.Sort("Ma"); 

कर सकते हैं आप अपने तार के साथ तत्वों के आदेश और अन्य लोगों अवर्गीकृत छोड़ देते हैं, इस का उपयोग करने की जरूरत है:

public static string[] Sort(this string[] list, string start) 
{ 
    List<string> l = new List<string>(); 
    l.AddRange(list.Where(p => p.StartsWith(start)).OrderBy(p => p)); 
    l.AddRange(list.Where(p => !p.StartsWith(start))); 
    // l.AddRange(list.Where(p => !p.StartsWith(start)).OrderByDescending(p => p)); 
    return l.ToArray(); 
} 
संबंधित मुद्दे