0条评论
还没有人评论过~
代码很简单,就是初始化一个List<string>,然后对他排序,再输出出来。
排序规则是按数字从小到大,相同数字的 f.pdf 在 b.pdf 的前面。
前面的都排对了,单就最后两个40b.pdf,40f.pdf没有排对,请问是哪里出了问题
在你比较的第一行加上
if (s1 == s2) return 0;
由于你固定返回1和-1而没考虑相同的情况从而导致排序混乱
m:
list.Sort((str, str2) =>
{
var dot = str.IndexOf('.', StringComparison.CurrentCulture);
var dot2 = str2.IndexOf('.', StringComparison.CurrentCulture);
if (dot != dot2)
return str.CompareTo(str2);
for (i = 0; i < dot - 1; i++)
if (str[i] != str2[i])
return str.CompareTo(str2);
return str2[dot2 - 1] - str[dot - 1];
});
你的if(ss1==40&&ss2==40)
的下一行是不是有个;
?
打个断点看一下最后比较的s1和s2具体比较的值
改下代码就好了:
List<string> lst = new List<string>
{
{ "39f.pdf "},
{ "39b.pdf" },
{ "40b.pdf" },
{ "40f.pdf "},
};
lst.Sort((s1, s2) =>
{
int ss1 = Convert.ToInt32(s1.Substring(0, s1.LastIndexOf('.') - 1));
int ss2 = Convert.ToInt32(s2.Substring(0, s2.LastIndexOf('.') - 1));
if (ss1 == ss2)
{
return s1.EndsWith("b.pdf") ? 1 : -1;// <--- 改这一句:如果 s1 不包含 b.pdf,就会跳过判定,使用默认值,那就是 f 在前了
}
return ss1 < ss2 ? -1 : 1;
});
foreach (var item in lst)
{
Console.WriteLine(item);
}
你把==40的判断代码去掉呢