Я хочу apple
и Apple
сравнение будет true
. В настоящее время
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
ruby
string
string-comparison
Стивен
источник
источник
casecmp
: Глупое название для прецедентного в , чувствительного сравнить метод ?!== 0
сzero?
"Apple".casecmp("APPLE").zero?
но лично мне нравится ответ Андреса ниже, который использует.casecmp?
В Ruby 2.4.0 у вас есть:
casecmp?(other_str) → true, false, or nil
Здесь у вас есть больше информации
источник
casecmp
мусором."aBcDeF".downcase == "abcdef"
вместо этого. Гораздо более удобочитаемы, а приростcasecmp
производительности устранен в Ruby 2.4+.false
иnil
для API, подобного этому ...Если вам нужно сравнить строки UTF-8 без учета регистра:
Это работает в Ruby 2.3.1 и более ранних версиях.
Для меньшего объема памяти вы можете выбрать вишню
string/multibyte
:Редактировать , Ruby 2.4.0:
Так
casecmp
что не работает в 2.4.0; Однако в 2.4.0 можно сравнивать строки UTF-8 вручную безactive_support
гема:источник
casecmp и ноль? Рубиновые встроенные методы. casecmp возвращает 0, если две строки равны, без учета регистра и ноль? проверяет нулевое значение (== 0)
источник
0
, особенно когда он вложен в более сложное условие.Для ruby 2.4 работает нормально casecmp? для строк utf-8 (mb_chars не требуется):
но casecmp не работает для utf-8:
источник