1. ホーム
  2. python

[解決済み] GolangはPythonのように文字列を乗算することができますか?

2023-06-01 23:15:46

質問

Pythonは文字列の乗算を以下のように行うことができます。

Python 3.4.3 (default, Mar 26 2015, 22:03:40)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 'my new text is this long'
>>> y = '#' * len(x)
>>> y
'########################'
>>>

Golangはどうにかして同等のことができないでしょうか?

どのように解決するのですか?

演算子の代わりに関数があります。 strings.Repeat . Pythonの例を移植して、次のように実行します。 ここで :

package main

import (
    "fmt"
    "strings"
    "unicode/utf8"
)

func main() {
    x := "my new text is this long"
    y := strings.Repeat("#", utf8.RuneCountInString(x))
    fmt.Println(x)
    fmt.Println(y)
}

なお、私は utf8.RuneCountInString(x) の代わりに len(x) 前者はルーン(Unicodeコードポイント)をカウントし、後者はバイトをカウントします。の場合 "my new text is this long" の場合、すべての文字が1バイトなので、この違いは重要ではありませんが、何を意味しているかを指定する習慣をつけるとよいでしょう。

len("ā") //=> 2
utf8.RuneCountInString("ā") //=> 1

Pythonの比較問題でしたので、Pythonでは、1つの関数 len は呼び出すものによって異なるものをカウントします。Python 2 では、プレーンな文字列ではバイトを、Unicode 文字列ではルーンを数えていました ( u'...' ):

Python 2.7.18 (default, Aug 15 2020, 17:03:20)
>>> len('ā') #=> 2
>>> len(u'ā') #=> 1

一方、最近のPythonでは、プレーンな文字列である ユニコード文字列です。

Python 3.9.6 (default, Jun 29 2021, 19:36:19) 
>>> len('ā') #=> 1

バイト数を数える場合は、文字列をエンコードして bytearray を最初に指定します。

>>> len('ā'.encode('UTF-8')) #=> 2

Pythonは複数の種類の文字列とその長さを得るための1つの関数を持っています。Goは1種類の文字列しか持っていませんが、欲しいセマンティクスにマッチする長さの関数を選ぶ必要があります。