ホームページ  >  記事  >  バックエンド開発  >  Go で文字列リストの大文字と小文字を区別しない並べ替えを実現するにはどうすればよいですか?

Go で文字列リストの大文字と小文字を区別しない並べ替えを実現するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-28 06:57:29946ブラウズ

How to Achieve Case-Insensitive Sorting of String Lists in Go?

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

Go で文字列リストの大文字と小文字を区別せずに並べ替えるには、sort の使用を検討してください。 Slice() は、sort.Strings() よりも柔軟性が高くなります。

大文字と小文字を区別しない比較のためのカスタム関数

sort.Slice にカスタム関数を渡すことができます。 () 大文字と小文字を区別しない比較を実行します。次の関数は、比較する前に文字列を小文字に変換します:

<code class="go">func lowercaseCompare(s1, s2 string) bool {
    return strings.ToLower(s1) < strings.ToLower(s2)
}</code>

カスタム関数の適用

カスタム関数を使用して、大文字と小文字を区別せずにリスト データを並べ替えるには:

<code class="go">sort.Slice(data, lowercaseCompare)</code>

文字列リスト データ:= []string{"A", "b", "D", "c"} について考えます。カスタム関数を使用して大文字と小文字を区別せずに並べ替えると、結果 ["A"、"b"、"c"、"D"] が生成されます。

大文字と小文字を区別しない効率的な並べ替え

上記のアプローチでは、比較ごとに 2 つの新しい文字列が割り当てられます。大きな文字列リストの場合、これは非効率的になる可能性があります。パフォーマンスを向上させるには、ルーンごとの比較を検討してください:

<code class="go">func runeCompare(a, b string) bool {
    for {
        r1, s1 := utf8.DecodeRuneInString(a)
        r2, s2 := utf8.DecodeRuneInString(b)
        if r1 == utf8.RuneError || r1 == r2 {
            return s1 < s2
        }
        a = a[s1:]
        b = b[s2:]
    }
}</code>

runeCompare() による効率的な並べ替え

データを効率的に並べ替えるには:

<code class="go">sort.Slice(data, runeCompare)</code>

代替解決策:collat​​e パッケージ

言語または文化固有の並べ替えには、collat​​e パッケージの使用を検討してください。ロケールを認識した並べ替え機能を提供します。

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

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