23370


Go言語で2次元配列を作成し、そこから部分的に取り出した配列を作りたい時にスライスを用いて下記のように記述しましたが、行は切り出せましたが列は切り出せませんでした。

<https://play.golang.org/p/QSzCo8ffBw>

つまり上の例では[5,5]を[3,3]になってほしいところが[3,5]になってしまっています。  
列も含めスライスするにはどのようにすれば良いのでしょうか。


CC BY-SA 3.0
2016-03-23T04:09:46.237
23368
2016-03-23T05:04:35.817
7232
question
go
Goで2次元配列の部分配列を得たい


残念ながらこのプログラムですと

[code]

    m := [][]float64{
        {1, 1, 1, 0, 0},
        {0, 1, 1, 1, 0},
        {0, 0, 1, 1, 1},
        {0, 0, 1, 1, 0},
        {0, 1, 1, 0, 0},
    }
    
[/code]

に対して、 `m[0:3][0:3]` は

[code]

    n := m[0:3]
    n[0:3]
    
[/code]

の処理をしたことと同じになってしまいます。行と列が同じ数だとわかりにくいので `n[0:2]` としたものが次のコードです。

<https://play.golang.org/p/wUylO3DLyR>

期待通りの動作をさせるには行ごとに必要な列を抜き出す処理を書いてあげないといけません。（次のコード参照）

<https://play.golang.org/p/0YaZMQiA6o>


CC BY-SA 3.0
2016-03-23T04:44:39.263
23370
2016-03-23T05:04:35.817
2016-03-23T05:04:35.817
216
216
23368
answer


この場合、`m[0:3][0:3]` は、

[code]

    n = m[0:3]
    fmt.Println(n[0:3])
    
[/code]

と同じなので、結果的に行単位でスライスする事になります(`m[0:3][0:3][0:3][0:3]...` の様に何度繰り返しても同じ)。

ですので、例えば以下の様にして部分行と部分列を切り出します。

<https://play.golang.org/p/TtFNyNSnCs>


CC BY-SA 3.0
2016-03-23T04:56:17.997
23371
2016-03-23T04:56:17.997
23368
answer