Это то же самое, что и кодовая точка для сравнения кодовой точки, то есть одна, которая не обращает внимания на складывание, культурный порядок, композицию или что-то другое, кроме значения Unicode.
Это довольно бесполезно при рассмотрении строки как части человеческого восприятия текста, но иногда вы просто хотите, чтобы иметь возможность поставить строки в в упорядочение, так как некоторые алгоритмы (бинарный поиск, как вы говорите) нужен последовательное упорядочение, но детали этого последовательного упорядочения незначительны.
Важно отметить, что порядковое сравнение строк, предлагаемых .NET, работает на UTF-16, используемом внутри, что не поддерживает заказ кода. Если мы сравним строку с символом U + FF61 и строкой только с символом U + 10002, тогда .NET сохранит последние как суррогатные пары, 0xD800 и 0XDC02.
Следовательно:
string.CompareOrdinal("\U0000ff61", "\U00010002");
и
string.Compare("\U0000ff61", "\U00010002", StringComparison.Ordinal);
как возвращаемые значения большие, чем ноль, даже если бывший ниже стоимости кода точки, чем последний (я использовал форму \ U, а чем форма \ u, чтобы сделать это яснее).
Если по «фактическим строкам Unicode» вы имеете в виду строки .NET UTF-16, тогда ответ на ваш вопрос - это нет, по-разному, к тому, что привело к мысли, что это может сработать.
Как отмечает Джон Ханна в своем ответе, в .NET вы сравниваете точки кода как суррогатные пары UTF-16, а не 32-битные числа, поэтому вы фактически получаете разные результаты. Но я принял ваш ответ, потому что вы первыми отметили, что значимое сравнение строк в юникоде не должно основываться на кодовых точках. – Eloff
Я бы не назвал это «правильное» сравнение строк в Юникоде, а сравнение «лингвистических» строк.Существует множество применений сравнения строк, которые не являются лингвистическими, например, внедрение типов данных хранения и поиска и алгоритмов, таких как «quicksort», «двоичный поиск» и т. Д. В таких случаях вам нужен самый быстрый надежный порядок. – hippietrail
Я не согласен с @hippietrail, так как во всех упомянутых случаях хотелось бы, чтобы U + 00e9 был таким же, как U + 0065, за которым следует U + 0301. Существует ли такое «правильное» сравнение строк Unicode? – vy32