我有一个这样的数组 -
string[] input = new string[] {"bRad", "Charles", "sam", "lukE", "vIctor"}
现在我想根据每个字符串中出现的大写字母的位置对其进行排序。第一次出现是排序时唯一要考虑的出现。如果两个字符串在同一位置有 CAP,则按字母顺序对它们进行排序,同样适用于没有任何 CAP 的字符串,按字母顺序对其进行排序。
到目前为止,我所做的还不够好。我已经尝试了无数次来改进它,但没有运气。将有大量数据对此进行测试。所以性能是最重要的。我正在使用 .NET 2.0,并且不允许使用任何更高版本。
public static int q, p, i, s;
public static Dictionary<string, int> a = new Dictionary<string, int>();
Array.Sort(input, delegate (string x, string y) {
if (x == y)
return 0;
if (a.TryGetValue(x + "|" + y, out s))
return s;
if (a.TryGetValue(y + "|" + x, out s))
return -s;
q = x.Length;
p = y.Length;
for (i = 0; i < x.Length; i++)
{
if (x[i] < 91)
{
q = i;
break;
}
}
for (i = 0; i < y.Length; i++)
{
if (y[i] < 91)
{
p = i;
break;
}
}
if (q == x.Length && p == y.Length)
s = x.CompareTo(y);
else if (q > p)
s = 1;
else if (q < p)
s = -1;
else
s = x.CompareTo(y);
a.Add(x + "|" + y, s);
return s;
});