我想对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,...
是否有任何预定义的方法可以做到这一点,还是我需要自己拼凑一些东西?
编辑:由于“资本最后”似乎很难,我暂时保留了数字。
答案 0 :(得分:2)
最后我选择了@JohnTortugo的建议。感谢John,简单易懂,简单易行!
通过每个字节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());
}
交换排序前后列表中每个字符串的大小写
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();
结果:
一 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);
答案 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