Simplify AlphanumericComparator
This commit is contained in:
parent
6b006a576d
commit
b7f2c8de5b
|
@ -86,48 +86,13 @@ namespace Jellyfin.Extensions
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if (span1Len >= 20) // Number is probably too big for a ulong
|
|
||||||
{
|
|
||||||
// Trim all the first digits that are the same
|
|
||||||
int i = 0;
|
|
||||||
while (i < span1Len && span1[i] == span2[i])
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there are no more digits it's the same number
|
|
||||||
if (i == span1Len)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only need to compare the most significant digit
|
|
||||||
span1 = span1.Slice(i, 1);
|
|
||||||
span2 = span2.Slice(i, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ulong.TryParse(span1, out var num1)
|
|
||||||
|| !ulong.TryParse(span2, out var num2))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else if (num1 < num2)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else if (num1 > num2)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int result = span1.CompareTo(span2, StringComparison.InvariantCulture);
|
int result = span1.CompareTo(span2, StringComparison.InvariantCulture);
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} while (pos1 < len1 && pos2 < len2);
|
} while (pos1 < len1 && pos2 < len2);
|
||||||
|
|
||||||
return len1 - len2;
|
return len1 - len2;
|
||||||
|
|
|
@ -19,6 +19,11 @@ namespace Jellyfin.Extensions.Tests
|
||||||
[InlineData("12345678912345678912345678913234567891", "12345678912345678912345678913234567892")]
|
[InlineData("12345678912345678912345678913234567891", "12345678912345678912345678913234567892")]
|
||||||
[InlineData("12345678912345678912345678913234567891a", "12345678912345678912345678913234567891a")]
|
[InlineData("12345678912345678912345678913234567891a", "12345678912345678912345678913234567891a")]
|
||||||
[InlineData("12345678912345678912345678913234567891a", "12345678912345678912345678913234567891b")]
|
[InlineData("12345678912345678912345678913234567891a", "12345678912345678912345678913234567891b")]
|
||||||
|
[InlineData("a5", "a11")]
|
||||||
|
[InlineData("a05a", "a5b")]
|
||||||
|
[InlineData("a5a", "a05b")]
|
||||||
|
[InlineData("6xxx", "007asdf")]
|
||||||
|
[InlineData("00042Q", "42s")]
|
||||||
public void AlphanumericComparatorTest(params string?[] strings)
|
public void AlphanumericComparatorTest(params string?[] strings)
|
||||||
{
|
{
|
||||||
var copy = strings.Reverse().ToArray();
|
var copy = strings.Reverse().ToArray();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user