🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Q&A

解決済

2回答

2248閲覧

Rubyにおける空の配列の定義について

huziyu

総合スコア9

Ruby

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

0グッド

0クリップ

投稿2019/11/22 22:59

Rubyで空の配列を複数定義することについて質問です。

多重代入で複数の変数に一度に値を代入できるのは知っているんですが、
複数の変数に一度に空の配列を定義する方法が分かりません。

下記のコードだと、各変数にはnil入ってしまうようです。

a, b, c, d = []

下記コードであればそれぞれの変数に空の配列を定義すること自体は出来ますが、
冗長な書き方のように思えます。
こちらを一行で表現したいなと考えております。

a = [] b = [] c = [] d = []

よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下のいずれかの方法で可能です。

ruby

1a=b=c=d=[] # これだと全て同じオブジェクトを参照してしまう 2 3a,b,c,d=[],[],[],[] 4 5# どうしてもDRYにやりたい 6a,b,c,d=Array.new(4).map{[]}

投稿2019/11/22 23:20

編集2019/11/23 00:15
kazto

総合スコア7196

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

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

kazto

2019/11/22 23:23

失礼、一つ目の方は全部同じオブジェクトを参照してしまうので、意図したものではありませんでした。
huziyu

2019/11/22 23:28 編集

なるほど、「これか!」と思ったんですが、同じオブジェクトを参照してしまうんですね… そうなると下の方で定義するほかないんでしょうかね。 もしくはループ処理するとか。 ともあれ、回答頂き、ありがとうございます!
maisumakun

2019/11/22 23:52

上の方法だと、1つの配列が4つの変数で共有されてしまって、戸惑うことも出てきそうな気がします。
kazto

2019/11/23 00:16

まいすまさん> おっしゃる通りですね。注釈を追記しました。
huziyu

2019/11/23 00:33

まず4つのnilを持つ配列を定義して、それぞれのnilを空の配列にしたものを作って a〜dと対応させる感じですかね。 こちらの方法は思いつきませんでした! 大変参考になりますm(_ _)m
guest

0

ruby

1a,b,c,d = [[]]*4 2 3p a,b,c,d

コメントを受けて追記

ruby

1a,b,c,d = Array.new(4){[]} 2p a,b,c,d 3a << 1 4p a,b,c,d

投稿2019/11/23 00:02

編集2019/11/23 00:56
asm

総合スコア15149

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

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

maisumakun

2019/11/23 00:29 編集

これも、同じインスタンスの共有になってしまいますね。
asm

2019/11/23 00:56

ありがとうございます。 追記しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問