[英]Sort List<string > by Leading Numbers
我無法根據開頭的數字正確排序我的列表。 當我排序時,它從1開始,然后到10、11,依此類推。
我正在嘗試按以下順序排序:
1 | Text One
10 | Text Two
11 | Text Three
我嘗試排序的方法在這里:
finalnoteslist = finalnoteslist.OrderBy(num => num).ToList();
System.Text.StringBuilder clipData = new System.Text.StringBuilder();
foreach (object value in finalnoteslist)
{
clipData.AppendLine(value.ToString());
}
Clipboard.Clear();
Clipboard.SetText(clipData.ToString());
MessageBox.Show(clipData.ToString() + Environment.NewLine + "NOTES COPIED TO CLIPBOARD. CONTROL + V TO PASTE IN DRAWING");
}
int CompareStringBuilders(System.Text.StringBuilder a, System.Text.StringBuilder b)
{
for (int i = 0; i < a.Length && i < b.Length; i++)
{
var comparison = a[i].CompareTo(b[i]);
if (comparison != 0)
return comparison;
}
return a.Length.CompareTo(b.Length);
}
您將每個項目按其分隔符|
並將第一部分解析為一個int
值。 然后,您對它們進行排序。
List<string> finalnoteslist = new List<string>()
{ "1 | Text One",
"10 | Text Two",
"11 | Text Three"
};
finalnoteslist = finalnoteslist.OrderBy(x => int.Parse(x.Split('|').First())).ToList();
您可以使用string.Split
拆分並獲取前導整數,該整數可用於對列表進行排序。
finalnoteslist = finalnoteslist.OrderBy(x=> int.Parse(x.Split('|')[0])).ToList();
試試這個Demo
要就地對列表進行排序:
List<string> strings = new List<string>()
{
"1 | Text One", "12 | Text Two", "100 | Text Three", "2 | Text Four"
};
Func<string, int> getNumber = (str) => Int32.Parse(str.Split('|').FirstOrDefault());
strings.Sort((y, x) => getNumber(y) - getNumber(x));
使用Linq排序(創建新列表):
strings = strings.OrderBy(x => convertFunction(x)).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.