按照之前的 cmets,我还将实现一个自定义 IComparer<T> 类。据我所知,项目的结构要么是一个数字,要么是一个数字后跟一个字母的组合。如果是这种情况,下面的IComparer<T> 实现应该可以工作。
public class CustomComparer : IComparer<string>
{
public int Compare(string x, string y)
{
var regex = new Regex("^(d+)");
// run the regex on both strings
var xRegexResult = regex.Match(x);
var yRegexResult = regex.Match(y);
// check if they are both numbers
if (xRegexResult.Success && yRegexResult.Success)
{
return int.Parse(xRegexResult.Groups[1].Value).CompareTo(int.Parse(yRegexResult.Groups[1].Value));
}
// otherwise return as string comparison
return x.CompareTo(y);
}
}
有了这个IComparer<T>,你就可以对string列表进行排序了
var myComparer = new CustomComparer();
myListOfStrings.Sort(myComparer);
已通过以下项目进行了测试:
2, 1, 4d, 4e, 4c, 4a, 4b, A1, 20, B2, A2, a3, 5, 6, 4f, 1a
并给出结果:
1, 1a, 2, 20, 4a, 4b, 4c, 4d, 4e, 4f, 5, 6, A1, A2, a3, B2