最后用大写字母区分大小写

时间:2018-03-08 07:32:53

标签: c# sorting

我想对List<进行排序串GT;区分大写最后一个,即按顺序

一个,ABC,B,BXY,C,A,AX,B,C,...

我试过了

Comparison<string> c = (string x1,string x2) => StringComparer.Ordinal.Compare(x1,x2);
list.Sort(c);

但它返回

A,AX,B,C,A,ABC,B,BXY,C,...

是否有任何预定义的方法可以做到这一点,还是我需要自己拼凑一些东西?

编辑:由于“资本最后”似乎很难,我暂时保留了数字。

3 个答案:

答案 0 :(得分:2)

最后我选择了@JohnTortugo的建议。感谢John,简单易懂,简单易行!

  1. 通过每个字节XOR'ing 0x20交换一个字符串中的大写和小写(假定ASCII编码):

    static string swapUpperLower(string s)
    {
        return System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(s).Select(c => (byte)(c^0x20)).ToArray());
    }
    
  2. 交换排序前后列表中每个字符串的大小写

        Comparison<string> c = (string x1,string x2) => StringComparer.Ordinal.Compare(x1,x2);
    
        sl = sl.Select(s => swapUpperLower(s)).ToList();
        sl.Sort(c);
        sl = sl.Select(s => swapUpperLower(s)).ToList();
    
  3. 结果:

    一 ABC b BXY C 一个 斧头 乙 ç

答案 1 :(得分:0)

试试这个:

byte[] ascii = Encoding.ASCII.GetBytes("aBcDEf");
        var result = ascii.OrderByDescending(b => b).ToList();
        string converted = string.Empty;
        foreach(var c in result)
        {
            converted += Char.ConvertFromUtf32(c);
        }
        Console.WriteLine(converted);

enter image description here

答案 2 :(得分:0)

你可以尝试这个冗长的代码它就像一个魅力

public static List<String> CustomSort(List<String> ls)
    {

        ls.Sort();
        List<String> Oint = new List<String>();
        List<String> Ocap = new List<String>();
        List<String> Osma = new List<String>();

        foreach(string s in ls)
        {
            int n;
            bool isNumeric = int.TryParse(s, out n);
            if(isNumeric)
            {
                Oint.Add(s);
            }
            else if (char.IsUpper(s[0]))
            {
                Ocap.Add(s);
            }
            else if (!char.IsUpper(s[0]))
            {
                Osma.Add(s);
            }
        }

        var r1 = Oint.Concat(Osma).Concat(Ocap);

        List<String> com = r1.ToList();
        return com;

    }

然后将其称为

List<String> ls = new List<String>();
            ls.Add("1");
            ls.Add("Cdsd");
            ls.Add("BCCd");
            ls.Add("ADDD");
            ls.Add("3");
            ls.Add("2");
            ls.Add("aDFD");
            ls.Add("cSS");
            ls.Add("b");
        List<String> cuz = CustomSort(ls);
        foreach(String s in cuz)
        {
            Console.WriteLine(s);
        }

您可以试用此代码here