Chcę apple
i Apple
porównanie być true
. Obecnie
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
ruby
string
string-comparison
Steven
źródło
źródło
casecmp
: Głupie imię dla CASE- w wrażliwego metodą porównania ?!== 0
zzero?
"Apple".casecmp("APPLE").zero?
Ale osobiście podoba mi się odpowiedź Andresa poniżej, która używa.casecmp?
W Rubim 2.4.0 masz:
casecmp?(other_str) → true, false, or nil
Tutaj masz więcej informacji
źródło
casecmp
śmieciami."aBcDeF".downcase == "abcdef"
zamiast tego używał . Znacznie bardziej czytelne, a korzyści wynikające z używaniacasecmp
są wyeliminowane w Ruby 2.4+.false
inil
dla takiego API ...W przypadku, gdy musisz porównać łańcuchy UTF-8 ignorując wielkość liter:
Działa to w ten sposób w Rubim 2.3.1 i wcześniejszych wersjach.
Aby uzyskać mniejszy rozmiar pamięci, możesz wybrać
string/multibyte
:Edycja , Ruby 2.4.0:
Więc
casecmp
nie działa w 2.4.0; Jednak w 2.4.0 można ręcznie porównać łańcuchy UTF-8 bezactive_support
klejnotu:źródło
casecmp i zero? to metody wbudowane w rubiny. casecmp zwraca 0, jeśli dwa łańcuchy są równe, bez rozróżniania wielkości liter i zero? sprawdza wartość zerową (== 0)
źródło
0
, zwłaszcza gdy jest zagnieżdżony z bardziej złożonym warunkiem.Dla Ruby 2.4 działa dobrze casecmp? dla ciągów utf-8 (mb_chars nie są potrzebne):
ale casecmp nie działa dla utf-8:
źródło