Верхний по сравнению с нижним регистром

79
задан Community 23 May 2017 в 12:02
поделиться

9 ответов

Преобразование или в верхний регистр или в нижний регистр, чтобы сделать нечувствительные к регистру сравнения, является неправильным из-за "интересных" функций некоторых культур, особенно Турция. Вместо этого используйте StringComparer с подходящими вариантами.

MSDN имеет [приблизительно 111] большие инструкции на строковой обработке. Вы могли бы также хотеть проверить, что Ваш код передает тест Турции .

РЕДАКТИРОВАНИЕ: Отметьте комментарий Neil [приблизительно 113] порядковые нечувствительные к регистру сравнения. Эта целая область довольно темна: (

88
ответ дан Jon Skeet 24 November 2019 в 10:13
поделиться

Согласно MSDN более эффективно передать в строках и сказать сравнению игнорировать регистр:

Строка. Сравните (Стра, strB, StringComparison. OrdinalIgnoreCase), эквивалентно (, но быстрее, чем ) вызов

Строка. Сравните (ToUpperInvariant (Стра), ToUpperInvariant (strB), StringComparison. Порядковый).

Эти сравнения все еще очень быстры.

, Конечно, при сравнении одной строки много раз тогда это не может содержать.

19
ответ дан boflynn 24 November 2019 в 10:13
поделиться

На основе строк, имеющих тенденцию иметь более строчные записи, ToLower должен теоретически быть быстрее (много из выдерживает сравнение, но немного присвоений).

В C, или при использовании индивидуально доступных элементов каждой строки (таких как струны до или строковый тип STL в C++), это - на самом деле сравнение байта - настолько выдерживающий сравнение UPPER, не отличается от lower.

, Если бы Вы были подлыми и загрузили свои строки в long массивы вместо этого, Вы получили бы очень быстрое сравнение на целой строке, потому что она могла сравнить 4 байта за один раз. Однако время загрузки могло бы сделать его не стоящим.

, Почему необходимо знать, который быстрее? Если Вы не делаете метрику buttload сравнений, одна рабочая пара циклов быстрее не важна скорости полного выполнения и походит на преждевременную оптимизацию:)

12
ответ дан warren 24 November 2019 в 10:13
поделиться

Microsoft оптимизировала ToUpperInvariant(), не ToUpper(). Различие - то, что инвариант является большей дружественной культурой. Если необходимо сделать нечувствительные к регистру сравнения на строках, которые могут варьироваться по культуре, использовать Инвариант, иначе производительность инвариантного преобразования не должна иметь значения.

я не могу сказать, быстрее ли ToUpper () или ToLower () все же. Я никогда не пробовал его, так как у меня никогда не было ситуации, где производительность имела значение так очень.

6
ответ дан Dan Herbert 24 November 2019 в 10:13
поделиться

При выполнении сравнения строк в C#, это значительно быстрее для использования.Equals () вместо того, чтобы преобразовать обе строки в верхний регистр или нижний регистр. Другой большой плюс для использования.Equals () - то, что больше памяти не выделяется для 2 новых верхних строк / строк нижнего регистра.

4
ответ дан Jon Tackabury 24 November 2019 в 10:13
поделиться

Это действительно никогда не должно иметь значения. С символами ASCII это определенно не имеет значения - что это - всего несколько сравнений и немного зеркального отражения для любого направления. Unicode мог бы быть немного более сложным, так как существуют некоторые символы, которые изменяют случай странными способами, но действительно не должно быть никакого различия, если Ваш текст не полон тех специальных символов.

1
ответ дан Adam Rosenfield 24 November 2019 в 10:13
поделиться

Это Зависит. Как указано выше, плоскость только ASCII, его идентичное. В.NET читайте об и используйте Строка. Сравните его корректное для материала i18n (культуры языков и unicode). Если Вы знаете что-нибудь о вероятности входа, используйте более общий падеж.

Помнят, если Вы делаете, несколько представляют в виде строки, выдерживает сравнение, длина является превосходным первым различителем.

0
ответ дан Sanjaya R 24 November 2019 в 10:13
поделиться

Если Вы имеете дело с чистым ASCII, он не имеет значения. Это просто ИЛИ x, 32 по сравнению с И x, 224. Unicode, я понятия не имею...

-2
ответ дан Brian Knoblauch 24 November 2019 в 10:13
поделиться

При правильном выполнении должно быть небольшое, незначительное преимущество в скорости при преобразовании в нижний регистр, но это, как многие намекали, зависит от языка и региональных параметров и наследуется не в функции, а в строки, которые вы конвертируете (много букв нижнего регистра означает меньшее количество назначений в память) - преобразование в верхний регистр происходит быстрее, если у вас есть строка с большим количеством букв верхнего регистра.

1
ответ дан 24 November 2019 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: