Go の sort.Strings() を使用した大文字と小文字を区別しない並べ替え
Go では、文字列のリストを大文字と小文字で並べ替えることができます-sort.Strings() 関数とカスタム比較関数を使用する -insensitive な方法。このカスタム関数は、文字列を小文字に変換した結果を使用して文字列を比較します。
例:
<code class="go">data := []string{"A", "b", "D", "c"} sort.Strings(data) // Default case-sensitive sorting fmt.Println(data) // Output: [A b c D]</code>
大文字と小文字を区別しない並べ替えを実現するには、カスタム関数を定義できます。次のような関数:
<code class="go">sort.Slice(data, func(i, j int) bool { return strings.ToLower(data[i]) < strings.ToLower(data[j]) })</code>
この関数は、比較する前に両方の文字列を小文字に変換し、大文字と小文字を区別しない並べ替え順序になります。
更新されたコードの実行:
<code class="go">data := []string{"A", "b", "D", "c"} sort.Slice(data, func(i, j int) bool { return strings.ToLower(data[i]) < strings.ToLower(data[j]) }) fmt.Println(data) // Output: [A b c D]</code>
代替案:
上記のアプローチは効果的ですが、比較中に文字列の割り当てが発生する可能性があります。割り当てを回避するための別のアプローチは、各ルーンを小文字に変換しながら文字列をルーンごとに比較することです:
<code class="go">func lessLower(sa, sb string) bool { for { rb, nb := utf8.DecodeRuneInString(sb) if nb == 0 { return false } ra, na := utf8.DecodeRuneInString(sa) if na == 0 { return true } rb = unicode.ToLower(rb) ra = unicode.ToLower(ra) if ra != rb { return ra < rb } sa = sa[na:] sb = sb[nb:] } }</code>
その後、このlessLower関数を使用して文字列を大文字と小文字を区別せずに並べ替えることができます:
<code class="go">sort.Slice(data, func(i, j int) bool { return lessLower(data[i], data[j]) })</code>
言語または文化固有の並べ替え順序については、collate パッケージの使用を検討してください。
以上がGo で `sort.Strings()` 関数を使用して、大文字と小文字を区別しない文字列の並べ替えを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。