如何对编号列表进行排序

时间:2019-10-09 18:54:23

标签: c# linq

所以我有这个编号列表,需要按数字排序:

1
1.1.
1.1.1.
1.1.2.
1.1.3.
1.1.4.
1.1.5.
1.1.6.
1.1.7.
1.2.
1.2.1.
1.2.2.
1.2.3.
1.2.4.
1.2.5.
1.2.6.
1.3.
1.3.1.
1.3.2.
1.3.3.
1.3.4.
1.4.
1.4.1.
1.4.2.
1.4.3.
1.5.
1.5.1.
1.5.2.
1.5.3.
1.6.
1.6.1.
1.6.1.1.
1.6.1.2.
1.6.2.
1.6.2.1.
1.6.2.2.
1.6.2.3.
1.6.2.4.
1.6.2.5.
1.6.2.6.
1.6.3.
1.6.3.1.
1.6.3.2.
1.6.3.3.
1.6.3.4.
1.6.3.5.
1.6.4.
1.6.5.
1.7.
1.7.1.
1.7.1.1.
1.7.1.2.
1.7.1.3.
1.7.2.
1.7.3.
1.7.4.
1.7.5.
1.7.5.1.
1.7.5.2.
1.7.6.
1.7.7.
1.7.8.
1.7.9.
1.8.
1.9.
1.10.

问题是在尝试对1.10进行排序时。将在1.2之前出现。而不是1.9之后。

有任何想法,我如何使用C#或linq来实现这一目标?

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以创建一个IComparer<T>类来帮助分类程序完成您想要的事情:

class MyComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        string[] xParts = x.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
        string[] yParts = y.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);

        for (int i = 0;;i++)
        {
            if (xParts.Length >= i && yParts.Length < i)
                return 1;
            if (xParts.Length < i && yParts.Length >= i)
                return -1;
            if (xParts.Length < i && yParts.Length < i)
                return 0;

            int compared = int.Parse(xParts[i]).CompareTo(int.Parse(yParts[i]));
            if (compared != 0)
                return compared;
        }
    }
}

然后,您可以像这样对值进行排序:

var sorted = values.OrderBy(s => s, new MyComparer()).ToList();

答案 1 :(得分:-1)

您可以使用列表的排序方法

 List<int> lista = new List<int>() {2,6,1,2,4,9,0,3};
                lista.Sort();

                foreach (var item in lista)
                {
                    Console.WriteLine(item);
                }

                Console.ReadKey();