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

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

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

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

Q&A

解決済

3回答

2558閲覧

配列を倍数で格納する方法

ayu

総合スコア212

Ruby

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

0グッド

0クリップ

投稿2016/01/12 13:27

こんばんわ。

現在、配列でデータを抜いてこれたのですが、これを下記のようにしたいです。

・指定の倍数以内に収める
→60個のデータなら、05/611・・・
という風に倍数で納めます
・指定の倍数で納めた配列をさらに全て配列化する

例えば、

x = [*(0..111)] a = x.each_slice(6).to_a b = a[0] ←これを更に分解する 理想は下記のような感じで変数に一つずつ格納していきたいです。 これをループ化したいのですが、思いつきません、 a = [0..5] b = [6..11]

上のような感じで行っておりますが、無駄な処理をしているように思います。
もう少しコンパクトにかける方法があれば、教えていただきたいです。

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

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

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

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

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

guest

回答3

0

直接の回答ではありませんが、変数を動的に宣言することについての情報を記載します。
動的に変数を定義することは可能です。
参考

↑の述べられている方法をつかって、次のようなコードを書いてみました。
v.rb

ruby

1hash_of_variables = {a: [1, 2], b: [3, 4]} 2 3hash_of_variables.each do |var, val| 4 define_method(var) do 5 instance_variable_get("@__#{var}") 6 end 7 instance_variable_set("@__#{var}", val) 8end 9 10put a 11put b 12 13name = 'b' 14p hash_of_variables[name.to_sym]

実行結果:

$ ruby v.rb [1, 2] [3, 4] [3, 4]

でも
hash_of_variables = {a: [1, 2], b: [3, 4]}
を作った時点以降は hash_of_variables[:b] のようにアクセスすれば十分だとおもいます。

質問のケースの様なハッシュをつくることは、すこし工夫すれば十分に可能とおもいます。

投稿2016/01/13 14:11

katoy

総合スコア22324

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

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

ayu

2016/01/14 12:25

さらなる提示ありがとうございます。 全く自分が知らないことだったので、本当に助かります! 色々と試してみます。 ありがとうございます!
guest

0

こういうことですか?
正直a[0]などと普通に書いたほうがいいと思いますが。

ruby

1x = [*(0..111)] 2a = x.each_slice(6).to_a 3(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9) = a 4p a9 #=>[54, 55, 56, 57, 58, 59]

otnさんの言うようにおかしい発想です。
配列の要素一つ一つに別名をつける意味が無いです。

投稿2016/01/12 13:52

編集2016/01/12 14:30
ozwk

総合スコア13512

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

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

0

ベストアンサー

Ruby

1x = [*(0..111)] 2a = x.each_slice(6).to_a 3から、 4a = [0, 1, 2, 3, 4, 5] 5b = [6, 7, 8, 9, 10, 11], 6・・・・ 7g = [102, 103, 104, 105, 106, 107] 8h = [108, 109, 110, 111]

としたいという意味でしょうか?
そういう考えは、往々にして間違っていますので、そんなことをしたいと思ったより前に立ち戻って考え直すべきです。

「そんなことが出来るのか?」という単純な疑問であれば、evalを使えば出来ます。

投稿2016/01/12 13:49

otn

総合スコア84423

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

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

otn

2016/01/12 14:05

変数の個数が決まっているのなら、ループしてevalを使うより、ozwkさんの書かれているほうが簡単ですね。 いずれにせよ、そういうのは間違った方向です。
ayu

2016/01/12 14:13

自分自身もおかしなやり方をしているなって疑惑は抱いておりました。 けど、別の考え方が思い浮かばなかったので、お聞きしました。 evalに関しては、初めてなので調べてみます。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問