A Tour of Goの練習問題を解説するシリーズ(2/11) – Exercise: Slices
みなさん、こんにちは。人類をGopherにしたいと考えているまるりんです。
A Tour of Goはプログラミング言語Goの入門サイトです。 このシリーズではA Tour of Goの練習問題を解説します。
今回は以下の問題を扱います。
問題
Exercise: Slices
解答
https://go.dev/play/p/zCK8KEIqsJB
まず、
この関数は、長さ dy のsliceに、各要素が8bitのunsigned int型で長さ dx のsliceを割り当てたものを返すように実装する必要があります。
とあるので、文の骨格としては「スライスにスライスを割り当てたものを返す」と読めます。 スライスにスライスを割り当てるサンプルコードを書いてみます。
ソース
https://go.dev/play/p/4qGXFwB8fXW
実行結果
s: [[] []]
s[0]: [0 0 0 0]
s[1]: [0 0 0 0]
s: [[0 0 0 0] [0 0 0 0]]
同じ処理が2回繰り返されているため、ループにします。
ソース
https://go.dev/play/p/QMtPfa8hdg2
実行結果
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)を割り当てたものを返す」と読めるのでdy、dxを割り当てます。
ソース
https://go.dev/play/p/eL3GXT-q-EZ
実行結果
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://go.dev/play/p/ms32gGsR1T4
実行結果
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://go.dev/play/p/zCK8KEIqsJB
実行結果