Неожиданный порядок строк, если строка содержит два последовательных знака минуса

Дано следующее небольшое консольное приложение.net:

var names = new[] { "foo-018", "foo-033", "foo--03", "c", "b", "a" };
var ordered = names.OrderBy(n => n, StringComparer.InvariantCultureIgnoreCase);
Console.WriteLine(String.Join(", ", ordered));

Ожидаемый результат ИМХО будет одним из следующих двух:

a, b, c, foo-018, foo-033, foo--03
a, b, c, foo--03, foo-018, foo-033

К сожалению, я получаю следующий вывод:

a, b, c, foo-018, foo--03, foo-033

Итак, почему foo--03 отсортированы между двумя другими элементами только с одним знаком минус?

Если я заменю компаратор против StringComparer.OrdinalIgnoreCase Я получу одно из своих ожиданий, но почему сортирует агностик-культуролога таким образом? Я старался "en", "de", "fr"все они производят один и тот же странный порядок, только порядковый соответствует моей ментальной модели.

Кстати, все вышеперечисленные символы являются простыми ASCII-символами, никакой магии Unicode не задействовано, и я запустил программу с.Net Core 2.0 и Framework 4.6.2, получив те же результаты.

0 ответов

Другие вопросы по тегам