ホームページ > バックエンド開発 > Golang > Go String 内のランダムなルーンに効率的にアクセスするにはどうすればよいですか?

Go String 内のランダムなルーンに効率的にアクセスするにはどうすればよいですか?

DDD
リリース: 2024-11-25 07:49:10
オリジナル
935 人が閲覧しました

How Can I Efficiently Access a Random Rune in a Go String?

文字列のランダムなルーン要素に効率的にアクセスする

Go では、文字列は UTF-8 でエンコードされたバイトのシーケンスとして表されます。特定のインデックスにあるルーン要素にアクセスするには、for ... range ループを使用して文字列を反復処理します。ただし、この方法は頻繁にアクセスする場合には非効率になる可能性があります。

この非効率の理由は、Go の文字列がルーンに対して直接インデックス付けされていないためです。ルーンを抽出するには、UTF-8 バイト シーケンスをデコードする必要があります。このデコードのオーバーヘッドは、関数が複数回呼び出される場合に重大になります。

パフォーマンスを最適化するには、文字列の使用を避け、代わりに []rune スライスを使用することをお勧めします。スライスには効率的にインデックスが付けられ、ルーンへの直接アクセスが可能になります。入力タイプを変更できない場合は、デコードされた文字列の []rune 表現を保存するキャッシュを実装できます。

キャッシュを利用する、提供されている関数の修正バージョンを次に示します:

var cache = map[string][]rune{}

func RuneAt(s string, idx int) rune {
    rs := cache[s]
    if rs == nil {
        rs = []rune(s)
        cache[s] = []rune(s)
    }
    if idx >= len(rs) {
        return 0
    }
    return rs[idx]
}
ログイン後にコピー

キャッシュには、反復的なデコードを避けるために、デコードされた文字列の []rune 表現が保存されます。このアプローチにより、限られた文字列セットで RuneAt() が呼び出される場合、パフォーマンスが大幅に向上します。

以上がGo String 内のランダムなルーンに効率的にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート