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

Go で文字列を大文字と小文字を区別せずに並べ替えるにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-28 18:41:30201ブラウズ

How to Sort Strings Case-Insensitively in Go?

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

Go では、sort.Strings() 関数を使用して並べ替えます。文字列のリスト。ただし、そのままでは大文字と小文字を区別しない並べ替えのオプションは提供されません。

カスタム比較関数

大文字と小文字を区別しない並べ替えを実現する 1 つの方法は、次のとおりです。カスタム比較関数を sort.Strings() に渡します。ソート順で最初の文字列が 2 番目の文字列より前に来る必要がある場合、この関数は true を返す必要があります。

次のコードは、これを行う方法を示しています。

<code class="go">package main

import (
    "fmt"
    "sort"
)

func main() {
    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>

このアプローチでは、新しい文字列が作成されます。

Rune ごとの比較

割り当てを回避するには、より効率的なアプローチは、文字列をルーンごとに実行し、その場で小文字に変換します。

<code class="go">sort.Slice(data, func(i, j int) bool {
    for {
        rb, nb := utf8.DecodeRuneInString(data[j])
        if nb == 0 {
            return false
        }
        ra, na := utf8.DecodeRuneInString(data[i])
        if na == 0 {
            return true
        }
        rb = unicode.ToLower(rb)
        ra = unicode.ToLower(ra)
        if ra != rb {
            return ra < rb
        }
        data[i] = data[i][na:]
        data[j] = data[j][nb:]
    }
})</code>

言語固有の並べ替え

Go の Collat​​e パッケージは、言語に合わせてより高度な機能を提供します。特定または文化固有の並べ替え順序。

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

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