ホームページ  >  記事  >  バックエンド開発  >  Go で `sort.Strings()` 関数を使用して、大文字と小文字を区別しない文字列の並べ替えを実行するにはどうすればよいですか?

Go で `sort.Strings()` 関数を使用して、大文字と小文字を区別しない文字列の並べ替えを実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-28 02:24:01131ブラウズ

How can I perform case-insensitive sorting of strings in Go using the `sort.Strings()` function?

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>

言語または文化固有の並べ替え順序については、collat​​e パッケージの使用を検討してください。

以上がGo で `sort.Strings()` 関数を使用して、大文字と小文字を区別しない文字列の並べ替えを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。