2011-11-16 57 views
6

是否有.NET內置方法可以解決我的方案?C# - 由其他字符串作爲幫手的字符串排序

  1. 得到了一串字符串ex。​​
  2. 我用字符串作爲"Ma"排序字符串幫手
  3. 我的陣列結果是{ "Mark", "Mary", "Mat", "Tom", "Peter" }

我知道函數解決,這將是很容易,但我'感興趣的是這樣的方法存在。

PS。 使用.NET 4.0

+0

具有需要排序的匹配索引的字符串。那些沒有匹配字符串的其他字符串呢?如果你願意,你可以過濾掉所有匹配的字符串並對它們進行排序,最後在列表中添加剩餘的元素。 –

+0

對僅匹配指定前綴的元素進行排序,而將其他元素保留其原始相對排序的好處是什麼?排序的元素是否總是在開始時結束? –

+0

家庭作業,如果有的話請給它加標籤。 –

回答

17

使用.Net 3.5(及以上版本)OrderByDescending和Linq中的10種方法將能夠做到你想要的。例如:

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

輝煌:upvoted! – 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(); 
}