所以我有这个编号列表,需要按数字排序:
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来实现这一目标?
谢谢。
答案 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();