Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

2695閲覧

Goで多重スライスに追加したい

Haru14

総合スコア14

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2019/05/05 20:38

前提・実現したいこと

多次元スライスに要素を追加する方法を教えてください。
スライスの中のスライスに追加したいです。

m1:=[][]string{...}
となっています

発生している問題・エラーメッセージ

cannot use plan (type string) as type [][]string in append

###該当のソースコード

Go

1 m1 = append(m1,plan...)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

多重スライスにappendできるのはスライスだけです。エラーメッセージが示す通り、ただの文字列はappendできません。
まず、文字列スライスを作ってみてそれをappendしてみましょう。

あるスライス型の要素はあるスライス型の先頭の[]を取り除いた型です。

  • [][]string型の値の要素になれるのは[]string型の値だけです。
  • []string型の値の要素になれるのはstring型の値だけです。

つまりあるスライス型にappendできるのはその要素だけです。

これが基本のルールです。

ただし、別途...による可変長引数展開という仕様があるので一緒に使うと混乱しやすいですね。

以下の記述をする場合、基本のルールと違い、sとdの型は同じ型である必要があります。

go

1s = append(s, d...)

つまり、

s := []string{"a", "b", "c"} d := []string{"d", "e", "f"} s = append(s, d...) fmt.Println(s)

この場合、コンパイルできて出力は[a b c d e f]となります。

上記のコードの挙動は下記のコードと同じです。

go

1s := []string{"a", "b", "c"} 2d := []string{"d", "e", "f"} 3s = append(s, d[0], d[1], d[2]) 4fmt.Println(s)

d...は「dの各要素を展開して引数に渡す」という意味なのです。

結論としては「planは[][]string型である必要があります」です。

投稿2019/05/06 21:58

編集2019/05/07 08:34
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Haru14

2019/05/08 05:44

丁寧なご回答ありがとうございます! Goを始めたばかりなので大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問