排序列表<;字符串>;按前导数字

本文关键字:数字 字符串 列表 lt 排序 gt | 更新日期: 2023-09-27 17:57:58

我在根据前导号正确排序列表时遇到问题。当我排序时,它从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();