php 編集者 Apple、今日は、文字列が等しいかどうかを比較するときに、`strings.EqualFold` 関数が最初に長さの比較を実行しない理由について説明します。文字列の比較では、大文字と小文字を無視して比較するために `strings.EqualFold` 関数をよく使用します。しかし、なぜこの関数が最初に長さの比較を実行しないのか疑問に思う人もいるかもしれません。次の記事では、この質問に答え、この設計の理論的根拠について説明します。見てみましょう!
大文字と小文字を区別しない文字列を比較する一般的な方法は、最初に長さを明示的にチェックすることです。 リーリー
現在の実装では 2 つの入力文字列のいずれかが使い果たされた場合にのみ長さチェックを実行するため、これは回避策と思われます。パフォーマンスまたはその他の理由で、最初に長さのチェックを行わない理由はありますか? 解決策簡単な答えは、Go では 2 つの文字列の長さが異なっていても、単純な Unicode の大文字と小文字の折りたたみでは等しいためです (したがって、最初に長さを比較しても大文字と小文字の折りたたみが等しいかどうかは判断されません)。
より長い答えは次のとおりです。Go は文字列を
UTF-8 バイトとしてメモリに保存し、組み込みの len() 関数は UTF -8 を報告します。エンコードするバイト数。 UTF-8 は可変長文字エンコーディングです。単一の Unicode コード ポイントに対して異なるバイト数を使用する場合があるため、一致する大文字と小文字を区別するコード ポイントでは UTF-8 の異なるバイト数が使用される場合があります。
リーリー
これは出力されます (Go Playground で試してください): リーリー
以上が`strings.EqualFold` が最初に長さの比較を行わない理由はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。