LoginSignup
1
0

More than 3 years have passed since last update.

二次元配列の格納方法

Last updated at Posted at 2020-03-16

こんちは!
今日はrails上で二次元配列の格納方法を記載します。

理由

この内容が容易に見当たらなかったため、他の方の助けになればと思います。

一次元配列の格納方法

イメージとしては、[1,2,3,4,5,6]
という風に格納したい場合、railsではコントローラーに以下のように記載するとできます。

tests_contoroller.rb
def idex
  @test = [] #配列の宣言

  6.times do |i = 0| #6回読み込ませる、そしてiには0を格納している。iは初期化式
    @test[i] = i + 1 #初期化式で宣言したiに1足した数字を各配列に代入している。
    i += 1 #iに1を足してはじめに戻る。何もしないままはじめに戻ると同じ配列[0]を六回繰り返すだけだから
  end
  # 配列[i]になぜ1を足さないかは、配列の初期値は[0]だから

二次元配列の格納方法

次は二次元配列です。
イメージとしては[[1,1],[2,1],[3,1]]
と格納したい場合は以下の通りになります。

tests_contoroller.rb
def idex
  @test = [] #配列の宣言

  3.times do |i = 0| #3回読み込ませる、そしてiには0を格納している。iは初期化式
    @test[i] = [i + 1,1] 
    i += 1 
  end

@test[i] ←の部分は、一緒です。
その配列の中に、さらに配列を入れるイメージです。
|1|1|
|2|1|
|3|1|

これを使った応用で、以下のようなコードが表示が実現できます。

<select name="exp_year" id="exp_year"><option value="">--</option>
<option value="2020">20</option>
<option value="2021">21</option>
<option value="2022">22</option>
<option value="2023">23</option>
<option value="2024">24</option>
<option value="2025">25</option>
<option value="2026">26</option>
<option value="2027">27</option>
<option value="2028">28</option>
<option value="2029">29</option>
<option value="2030">30</option></select>

HTML上表示したいものは、1つめの配列に格納されています。
valueの値は、2つめに格納したものがです。

格納例としては、以下の通り
|20|2020|
|21|2021|
|22|2022|
|23|2023|

これらは以下のコードをコントローラー側に入力すると、vew側で表示でます。

tests_controller.rb
  def index
    year = 2020
    @year = []
    11.times do |i = 0|
      @year[i] = [year - 2000,year]
      year += 1
      i += 1
    end
  end

vewには以下の一文追加してね。

tests/test.html.haml
= select_tag 'exp_year',options_for_select((@year),class: "exp_year"),prompt: "--"

追加したら以下のように見れるはずです。(CSSは適当に付けてみるとよいでしょう)
Screenshot from Gyazo

以上です!
またこう言った、見当たらなかったものをあり次第、アップしていきます!

ほなねー。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0