1. ホーム
  2. string

[解決済み] goで文字列の連結を効率的に行う方法

2022-03-19 08:18:03

質問

囲碁では string はプリミティブ型です。つまり、読み取り専用で、操作するたびに新しい文字列が生成されます。

では、出来上がった文字列の長さを知らずに何度も文字列を連結したい場合、どのような方法があるのでしょうか?

素朴な方法としては

var s string
for i := 0; i < 1000; i++ {
    s += getShortStringFromSomewhere()
}
return s

が、これではあまり効率がよくないようです。

解決方法は?

新しい方法

Go 1.10 からは strings.Builder 型を使用します。 詳しくはこの回答をご覧ください。 .

旧来の方法

を使用します。 bytes パッケージを使用します。を搭載しています。 Buffer を実装したタイプです。 io.Writer .

package main

import (
    "bytes"
    "fmt"
)

func main() {
    var buffer bytes.Buffer

    for i := 0; i < 1000; i++ {
        buffer.WriteString("a")
    }

    fmt.Println(buffer.String())
}

これはO(n)時間で行う。