我正在嘗試獲取帶有數字和字符排序的字串串列。這些數字可以是單位數萬、千和萬(也可能更大)。
這是字串的示例:
1: abc
38: rst
203: pq
10371: mno
13: defg
1023: hi
109: jkl
例如來自串列
List<string> list = new List<string>()
{
"1: abc",
"38: rst",
"203: pq",
"10371: mno",
"13: defg",
"1023: hi",
"109: jkl",
};
我的預期結果是
10371: mno
1023: hi
203: pq
109: jkl
38: rst
13: defg
1: abc
我找到了這個部分解決方案對混合數字和字串進行排序
public class MixedNumbersAndStringsComparer : IComparer<string> {
public int Compare(string x, string y) {
double xVal, yVal;
if(double.TryParse(x, out xVal) && double.TryParse(y, out yVal))
return xVal.CompareTo(yVal);
else
return string.Compare(x, y);
}
}
list.Sort(new MixedNumbersAndStringsComparer());
但它是這樣排序的,而不是像上面預期的那樣
1: abc
13: defg
109: jkl
1023: hi
10371: mno
203: pq
38: rst
您將如何修改 MixedNumbersAndStringsComparer 類以使其按預期排序?謝謝!
uj5u.com熱心網友回復:
我不確定你的問題,但我認為這就是你要找的?
List<string> list = new List<string>()
{
"1: abc",
"38: rst",
"203: pq",
"10371: mno",
"13: defg",
"1023: hi",
"109: jkl",
};
var pairedList = new List<Tuple<int, string>>();
foreach (var item in list)
{
var items = item.Split(':');
pairedList.Add(new Tuple<int, string>(int.Parse(items[0].Trim()), items[1]));
}
var result = pairedList.OrderByDescending(x => x.Item1).Select(x => x.Item1 ":" x.Item2).ToList();
基本上,它只是用 : 分割串列中的每個字串,并將該對添加到元組中。從那里只需按 int 值排序并重建串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/452112.html
