以下解決方案適用於不止一個上限。
static void Main(string[] args)
{
var names = new List<String>() {
"access",
"Addition",
"ADDition",
"ADdition",
"account",
"base",
"Brick",
"zammer",
"Zilon"
};
names.Sort((one, two) =>
{
int result = 0;
var oneArray = one.ToCharArray();
var twoArray = two.ToCharArray();
var minLength = Math.Min(oneArray.Length, twoArray.Length) - 1;
var i = 0;
while (i < minLength)
{
//Diff Letter
if (Char.ToUpper(one[i]) != Char.ToUpper(two[i]))
{
result = Char.ToUpper(one[i]) - Char.ToUpper(two[i]);
break;
}
// Same Letter, same case
if (oneArray[i] == twoArray[i])
{
i++;
continue;
}
// Same Letter, diff case
result = one[i] - two[i];
break;
}
return result;
});
foreach (string s in names)
Console.WriteLine(s);
Console.WriteLine("done");
來源
2014-02-25 07:02:03
Avi
這可能是更好的是:'源.OrderBy(s => char.ToLower(s [0]))。ThenByDescending(s => s)'。這似乎是做這項工作。無論如何。 –
+1,但是隻有在字符串中間沒有大寫字母的情況下才有效? (理所當然,OP中沒有任何例子,但所述的要求並不排除這種可能性)。 – Baldrick
@Baldrick是的,我認爲上/下規則只適用於第一個字符。 – MarcinJuraszek