A Tour of Goの練習問題を解説するシリーズ(2/11) – Exercise: Slices

みなさん、こんにちは。人類をGopherにしたいと考えているまるりんです。

A Tour of Goはプログラミング言語Goの入門サイトです。 A Tour of Goには練習問題があるのですが、なかなか難しいものが多いと思います。 そこでこのシリーズではA Tour of Goの練習問題を解説していきたいと思います。

今回は以下の問題を解説します。

Exercise: Slices

解答
https://play.golang.org/p/1caqcsutika


まず、

この関数は、長さ dy のsliceに、各要素が8bitのunsigned int型で長さ dx のsliceを割り当てたものを返すように実装する必要があります。

とあるので、要約すると「スライスにスライスを割り当てたものを返す」と読めます。 スライスにスライスを割り当てるサンプルコードを書いてみます。

ソース
https://play.golang.org/p/t7gC52tNLNE

実行結果

s: [[] []]
s[0]: [0 0 0 0]
s[1]: [0 0 0 0]
s: [[0 0 0 0] [0 0 0 0]]

同じ処理が2回繰り返されているため、ループにします。

ソース
https://play.golang.org/p/w1r-1mwKVRB

実行結果

s: [[] []]
s[0]: [0 0 0 0]
s[1]: [0 0 0 0]
s: [[0 0 0 0] [0 0 0 0]]

スライスのスライスは無事に生成できました。 次に、スライスに指定の長さを割り当てます。

この関数は、長さ dy のsliceに、各要素が8bitのunsigned int型で長さ dx のsliceを割り当てたものを返すように実装する必要があります。

とあるので、要約すると「スライス(長さはdy)にスライス(長さはdx)を割り当てたものを返す」と読めるので指定の長さを割り当てます。

ソース
https://play.golang.org/p/B4NFbrjbIyv

実行結果

s: [[] []]
s[0]: [0 0 0 0]
s[1]: [0 0 0 0]
s: [[0 0 0 0] [0 0 0 0]]

次に、

各要素が8bitのunsigned int型で長さ dx のslice

とあります。長さがdxのスライスの各要素を表示してみます。

ソース
https://play.golang.org/p/NQZmPbSIG_e

実行結果

s: [[] []]
s[0][0]: 0
s[0][1]: 0
s[0][2]: 0
s[0][3]: 0
s[1][0]: 0
s[1][1]: 0
s[1][2]: 0
s[1][3]: 0
s: [[0 0 0 0] [0 0 0 0]]

次に、

例えば、面白い関数に、 (x+y)/2 、 x*y 、 x^y などがあります。

とありますが、これらの式を具体的にどこで使用するのかは書かれていません。しかし、

ヒント:( uint8(intValue) を型の変換のために使います)

をみる限り、intをuint8に変換するようです。先ほど表示したスライスの要素の型がuint8なのでおそらくここに代入すればよいと分かります。 ちなみに (x + y) / 2 の評価結果の型はintのため、uint8に変換する必要があります。

ソース
https://play.golang.org/p/1caqcsutika

実行結果

fig