今天看到小舖有人寫了一個問題要問
問題是這樣的
今天看到小舖有人寫了一個問題要問
問題是這樣的
private List<string> _temp = new List<string>();
private void parseNumber(string numbers)
{
_temp.Add("A1");
_temp.Add("A51");
_temp.Add("A13");
_temp.Add("A100");
_temp.Sort();
}
事實上這樣foreach出來會呈現
A1
A100
A13
A51
並不會A1,A13,A51,100這樣排列
bibby大大提供了一個解決方法
var result = _temp.OrderBy(a => Convert.ToInt32(a.Substring(1, a.Length - 1)));
foreach (string str in result)
{
Response.Write(str + "<br/>");
}
可是事實上很多專案現在都還是.NET2.0阿
bibby大大的lambda就不是每種情況都能派上用場了
然後bibby大大又叫我用delegate來取代一下他的超好用lambda
所以cloudio就另外寫了個傳入Comparison做排序的參數來解這個排序的題目
會比lambda長一點,先說好:P
_temp.Sort(new Comparison<string>(delegate(string i, string y) {
int o, p;
int.TryParse(i.Substring(1, i.Length - 1), out o);
int.TryParse(y.Substring(1, y.Length - 1), out p);
return o.CompareTo(p);
}));
其實這個delegate也可以寫成一個固定的method來處理這種會包含英文單字的字串
這樣就會比這個範例的只能處理第一個字是英文的字串更能reuse了