#each.with_indexを使って、配列の要素と要素番号を取り出し、表示させる
今まで作ったアプリケーション(1~3)の続きとなります。
1.Rubyで超簡単な本紹介アプリ
https://qiita.com/pontarou194/items/79d581955757e2589b00
2.Rubyで超簡単な本紹介アプリ(カテゴリ指定ver)
https://qiita.com/pontarou194/items/37a9c63fe617e3244e19
3.Rubyで超簡単な本紹介アプリ(日時指定自動表示)
https://qiita.com/pontarou194/items/4a7db6c7d9036cd0c53e
#each.with_indexを使って表示させたい番号を指定できます。
例えば以下のような例です。
categorys = ["小説","ノンフィクション","ビジネス書"]
categorys.each.with_index(1) do |category, number|
このように指定すると、
1:小説
2:ノンフィクション
3:ビジネス書
っといったように表示。仮に、数字を2と指定すると、、、
categorys.each.with_index(2) do |category, number|
puts "#{number}:#{category}"
下記のように2から始まります。
2:小説
3:ノンフィクション
4:ビジネス書
といった感じで、簡単なeach.with_indexの紹介でした。
要素に番号つけたいとき、便利ですよね。
これを今まで作成してきた、本紹介アプリに当て込みます。
するとこうなります。
#実際にeach.with_indexをコーディングしてみる
puts "本の名前を登録"
title= gets.chomp
puts "著者を登録"
author = gets.chomp
puts "本のカテゴリを入力してください"
categorys = ["小説","ノンフィクション","ビジネス書"]
categorys.each.with_index(1) do |category, number|
puts "#{number}:#{category}"
number += 1
end
category = gets.chomp
if category == "1" then
category = "小説"
elsif
category == "2" then
category = "ノンフィクション"
elsif
category == "3" then
category = "ビジネス書"
else
category = "その他"
end
require "date"
time = DateTime.now
print(time.hour,"時",time.min,"分",time.sec,"秒\n")
puts "以下の通り登録しました"
puts "本の名前は「#{title}」"
puts "著者の名前は「#{author}」"
puts "カテゴリは「#{category}」"
今までと少し変わった点は、
categorys.each.with_index(1) do |category, number|
の上につけていた、
number = 1
という宣言が不要になったという点くらいですね。
each.with_indexで開始したい要素番号を記載すれば、わざわざ宣言する必要もなくなりました。
最後に動作確認だけしておきます。
#動作確認
本の名前を登録
7つの習慣
著者を登録
コビー
本のカテゴリを入力してください
1:小説
2:ノンフィクション
3:ビジネス書
3
13時10分9秒
以下の通り登録しました
本の名前は「7つの習慣」
著者の名前は「コビー」
カテゴリは「ビジネス書」
上記の通りになるかと思います。
以上となります。
間違いや、こういうやり方もあるよねとか、こういうやり方のほうがセンスいいよねとかありましたら、ご指摘いただけますと幸いです。
最後までみてくれてありがとうございます。