質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

4回答

1566閲覧

Rubyでの2次配列

akuta

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/10/18 19:41

Ruby初心者なのですが、Cでいう
int squares[5][5];
みたいな二次配列を書きたいのですがどう書けばいいのでしょうか

調べたところarrayを使うというところまでは分かったのですが

よろしくお願いします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

書き方は色々ありますが、用途が書かれていないので基本的なものを書くと

ruby

1array = [ 2 [0, 0, 0, 0, 0, 0], 3 [0, 1, 2, 3, 4, 5], 4 [0, 2, 4, 8, 16, 32], 5 [0, 3, 6, 9, 12, 15], 6 [0, 4, 8, 12, 16, 20], 7 [0, 5, 10, 15, 20, 25] 8] 9puts array[5][5] 10# => 25

とかでしょうか。

投稿2016/10/18 20:46

hana-da

総合スコア1728

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

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

akuta

2016/10/18 21:38

回答ありがとうございます オセロゲームが作りたくて 0が代入された盤面が作りたいのですが そういう場合も array = [ [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], ] puts array[5][5] と書けば大丈夫でしょうか?
akuta

2016/10/18 21:39

列を一個多く書いてしまいました。。。
hana-da

2016/10/18 22:25

はい。それでいいと思います
guest

0

Array.newをブロック付きで渡すと、1要素ごとにブロックを実行して、それで中身を埋めてくれます。

Array.new(8) { [0] * 8 }

なお、内側の方は整数がイミュータブルなので、掛け算で問題ありません。

投稿2016/10/18 23:11

maisumakun

総合スコア145201

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

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

0

Ruby

1Array.new(8){ Array.new(8,0) }

でしょうか。
より一般的には、

Ruby

1Array.new(8){ Array.new(8) {0} }

投稿2016/10/18 23:10

otn

総合スコア84712

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

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

0

... 0が代入された盤面が作りたいのですが ...

ruby

1$ irb 2irb(main):001:0> a = [0] * 8 3=> [0, 0, 0, 0, 0, 0, 0, 0] 4irb(main):002:0> a2 = [[0] * 8] * 8 5=> [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]

同じ値を埋めたいなら、 * を利用できます。

投稿2016/10/18 22:16

katoy

総合スコア22324

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

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

hana-da

2016/10/18 22:28

オセロゲームの盤面との事なので > a2 = [[0] * 8] * 8 で生成した後、 a2[5][5] = 1 とかすると、ちょっと残念な事になりそうです。 a2.map(&:object_id).uniq.size # => 1 になりますよね?
katoy

2016/10/18 23:00

> ... a2[5][5] = 1 とかすると、ちょっと残念な事になりそうです。 .. あ!、そうでした。
katoy

2016/10/19 13:33

maisumakun さんの方法と、ダサいですが each で設定する方法を確認してみました。 a.rb ```ruby BOARD_SIZE = 8 def show_board(board) board.each do |row| p row end end board = [] (1..BOARD_SIZE).each do |i| board << [0] * BOARD_SIZE end board[4][4] = board[5][5] = 1 board[4][5] = board[5][4] = -1 show_board(board) puts "" board = Array.new(8) { [0] * 8 } board[4][4] = board[5][5] = 1 board[4][5] = board[5][4] = -1 show_board(board) ``` 実行結果 ``` $ ruby a.rb [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 1, -1, 0, 0] [0, 0, 0, 0, -1, 1, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 1, -1, 0, 0] [0, 0, 0, 0, -1, 1, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0] ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問