Skip to content

Commit 0ca2947

Browse files
authored
fix classify sort stability (#54)
1 parent 478156d commit 0ca2947

1 file changed

Lines changed: 24 additions & 23 deletions

File tree

CsCheck/Utils.cs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,29 +1027,30 @@ public void Print(Action<string> writeLine)
10271027
writeLine($"| {new string(' ', maxLength)} | {"Count".PadLeft(nLength)} | % | {"Median".PadLeft(medianLength)} | {"Lower Q".PadLeft(lowerLength)} | {"Upper Q".PadLeft(upperLength)} | {"Minimum".PadLeft(minimumLength)} | {"Maximum".PadLeft(maximumLength)} |");
10281028
writeLine($"|-{new string('-', maxLength)}-|-{new string('-', nLength)}:|--------:|-{new string('-', medianLength)}--:|-{new string('-', lowerLength)}--:|-{new string('-', upperLength)}--:|-{new string('-', minimumLength)}--:|-{new string('-', maximumLength)}--:|");
10291029
foreach (var kv in estimators.OrderByDescending(kv =>
1030-
{
1031-
var a = kv.Key.Split('/');
1032-
var r = new int[a.Length];
1033-
for (int i = 0; i < a.Length - 1; i++)
1034-
r[i] = estimators[string.Join('/', a.Take(i + 1))].N;
1035-
r[^1] = kv.Value.N;
1036-
return (r, kv.Key);
1037-
}, Comparer<(int[], string)>.Create((xb, yb) =>
1038-
{
1039-
var (x, xs) = xb;
1040-
var (y, ys) = yb;
1041-
int c;
1042-
for (int i = 0; i < Math.Min(x.Length, y.Length); i++)
1043-
{
1044-
c = x[i].CompareTo(y[i]);
1045-
if (c != 0)
1046-
return c;
1047-
}
1048-
c = -x.Length.CompareTo(y.Length);
1049-
if (c != 0)
1050-
return c;
1051-
return -string.CompareOrdinal(xs, ys);
1052-
})))
1030+
{
1031+
var a = kv.Key.Split('/');
1032+
var r = new (int, string)[a.Length];
1033+
for (int i = 0; i < a.Length - 1; i++)
1034+
{
1035+
var prefix = string.Join('/', a.Take(i + 1));
1036+
r[i] = (estimators[prefix].N, prefix);
1037+
}
1038+
r[^1] = (kv.Value.N, kv.Key);
1039+
return r;
1040+
}, Comparer<(int, string)[]>.Create((x, y) =>
1041+
{
1042+
int c;
1043+
for (int i = 0; i < Math.Min(x.Length, y.Length); i++)
1044+
{
1045+
c = x[i].Item1.CompareTo(y[i].Item1);
1046+
if (c != 0)
1047+
return c;
1048+
c = -string.CompareOrdinal(x[i].Item2, y[i].Item2);
1049+
if (c != 0)
1050+
return c;
1051+
}
1052+
return -x.Length.CompareTo(y.Length);
1053+
})))
10531054
{
10541055
var a = kv.Key.Split('/');
10551056
var name = (new string((char)160, 2 * (a.Length - 1)) + a[^1]).PadRight(maxLength);

0 commit comments

Comments
 (0)