此问题已经在这里有了答案:
所以我有这个编号列表,需要按数字排序:
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来实现?
谢谢。
您可以创建一个IComparer<T>
类来帮助分类程序完成您想做的事情:
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();