LINQ排序特殊字符第一?

DDi*_*ita 3 .net c# linq sorting

看起来在使用LINQ排序时没有考虑特殊字符,我没想到它.无论如何,我需要对特殊字符进行排序,使它们首先出现在列表中.有任何想法吗?我知道我可以做类似的事情:使用LINQ进行任意排序,但是如何让sort扩展传递特殊字符:

示例列表:

  • "测试"
  • 测试

丹尼尔

Jac*_*itt 5

.Net 3.5的一个不太为人所知的特性是你可以用lambda替换IComparer.对于像这样的情况,这对于您想要一次性排序非常方便.如果这不是一次性的,那么使用自定义IComparer类可能会更好.这是你如何做这种蛮力风格:

List<string> list = new List<string>();
list.Sort((x, y) =>
{
    if(Char.IsLetterOrDigit(x[0])){
        if(!Char.IsLetterOrDigit(y[0])){
            // x is a letter/digit and y is not, override regular CompareTo
            return -1;
        }
    }
    else if (Char.IsLetterOrDigit(y[0]))
    {
        // y is a letter/digit and x is not, override regular CompareTo
        return 1;
    }
    return x.CompareTo(y);
});
Run Code Online (Sandbox Code Playgroud)