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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 10:34:02124ブラウズ

How to Achieve Case-Insensitive Sorting in Go with sort.Strings()?

sort.Strings() を使用した Golang での大文字と小文字を区別しない並べ替え

Python では、大文字と小文字を区別しない並べ替えは、多くの場合、次のキー パラメーターを使用して実現されます。カスタム比較関数を可能にするsorted()関数。ただし、Go の sort.Strings() には、直接同等のものはありません。

Go で大文字と小文字を区別しない並べ替えを実行するには、Go の強力なスライス機能を活用できます。 1 つの方法は、文字列の小文字バージョンを比較するカスタム比較関数を作成することです。

<code class="go">sort.Strings(data, func(i, j int) bool {
    return strings.ToLower(data[i]) < strings.ToLower(data[j])
})</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:]
    }
}

sort.Strings(data, func(i, j int) bool {
    return lessLower(data[i], data[j])
})</code>

このアプローチでは、文字列のルーンを直接比較することで、不必要な割り当てを回避します。

さらに柔軟性と言語固有の並べ替えを行うには、ロケールと言語固有の照合ルールを提供する Collat​​e パッケージの使用を検討してください。

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

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