回答:
あなたが探していcasecmp
ます。0
2つの文字列が等しい場合、大文字と小文字を区別せずに返されます。
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
または、両方の文字列を小文字(str.downcase
)に変換して、等しいかどうかを比較することもできます。
casecmp
:大文字と小文字を区別する比較メソッドの愚かな名前?!
== 0
とzero?
"Apple".casecmp("APPLE").zero?
次のとおりです。しかし、個人的には、以下のアンドレスの回答が好きです.casecmp?
ではRubyの2.4.0あなたが持っています:casecmp?(other_str) → true, false, or nil
"abcdef".casecmp?("abcde") #=> false
"aBcDeF".casecmp?("abcdef") #=> true
"abcdef".casecmp?("abcdefg") #=> false
"abcdef".casecmp?("ABCDEF") #=> true
casecmp
ジャンクでJavaを使用しているように感じます。
"aBcDeF".downcase == "abcdef"
代わりに使用することを正直にお勧めします。casecmp
Ruby 2.4以降では、はるかに読みやすくなり、使用によるパフォーマンスの向上が排除されています。
false
との違いは何でしょうかnil
大文字小文字を区別せずにUTF-8文字列を比較する必要がある場合:
>> str1 = "Мария"
=> "Мария"
>> str2 = "мария"
=> "мария"
>> str1.casecmp(str2) == 0
=> false
>> require 'active_support/all'
=> true
>> str1.mb_chars.downcase.to_s.casecmp(str2.mb_chars.downcase.to_s) == 0
=> true
Ruby 2.3.1以前のバージョンでは、このように動作します。
メモリフットプリントを小さくするには、チェリーピックを使用できますstring/multibyte
。
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Ruby 2.4.0を編集:
>> str1.casecmp(str2) == 0
=> false
したがってcasecmp
、2.4.0 では機能しません。ただし、2.4.0では、active_support
gem なしでUTF-8文字列を手動で比較できます。
>> str1.downcase == str2.downcase
=> true
casecmpとゼロ?Rubyの組み込みメソッドです。2つの文字列が等しく、大文字と小文字を区別せず、ゼロの場合、casecmpは0を返しますか?ゼロ値(== 0)をチェックします
str1.casecmp(str2).zero?
0
、特により複雑な条件でネストされている場合は、literalと比較するよりも明確であるため、私はそれが好きです。
Ruby 2.4がうまく動作する場合、casecmp?utf-8文字列の場合(mb_charsは不要):
2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
=> true
しかし、casecmpはutf-8では機能しません。
2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0