Ruby練習問題2-1:Array文を使ってフルーツの集計プログラムを作ろう

記事内に商品プロモーションを含む場合があります

Rubyの初心者向け問題2-1:Array文を使ってフルーツの集計プログラムを作ろう

この問題を解くために必要な知識:
【レベル1の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)

【レベル2の知識】
配列(Array)、ハッシュ(Hash)コレクション操作(配列、ハッシュの操作)Enumerableモジュール

<<前の問題 問題集Top 次の問題>>

Rubyの文法「Array文」とは

ここではArray文の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。



Rubyの配列は、複数の要素を一つの変数にまとめて格納できるデータ構造です。

配列を使うことで、数値や文字列などの異なるデータを一つのオブジェクトとして扱うことができます。

例えば、1から5までの数を一つの配列に格納し、その後に繰り返し処理を行って全ての要素を操作することが可能です。

使用例

以下は、配列を定義し、その要素を一つずつ表示する例です。

# 配列を定義する
arr = [1, 2, 3, 4, 5]

# 配列の各要素を順番に表示する
arr.each do |i|
  puts i
end

このコードでは、arr という配列に 1 から 5 までの数値が格納されています。

each メソッドを使うことで、配列の各要素に順番にアクセスし、その値を puts で出力しています。

配列の操作

要素の追加: 配列に要素を追加するには、<< 演算子を使います。

arr << 6  # 配列に6を追加

要素の削除: 配列の最後の要素を削除するには、pop メソッドを使います。

arr.pop  # 配列の最後の要素を削除

要素のアクセス: インデックスを使って特定の要素にアクセスできます。インデックスは 0 から始まります。

puts arr[0]  # 配列の最初の要素を表示

配列を使うメリット

配列を使うことで、複数のデータを一度に扱ったり、データに対して繰り返し処理を簡単に行えるため、コードがシンプルでわかりやすくなります。 ​

Ruby練習問題2-1:Array文を使ってフルーツの集計プログラムを作ろう

フルーツの販売記録を集計するプログラムを作成しましょう。

フルーツの販売データが以下の配列として与えられます。

fruits = ["りんご", "バナナ", "りんご", "オレンジ", "バナナ", "りんご"]

この配列には売れたフルーツの名前が順番に並んでいます。すなわち各フルーツの数を数えることでそのフルーツが何回売れたかが分かります。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • 配列 fruits にフルーツの名前が格納されていること。配列には「りんご」、「バナナ」、「オレンジ」などのフルーツが含まれている。
  • 各フルーツの販売回数をカウントするために、ハッシュ fruit_count を作成すること。
  • 配列 fruits の要素を1つずつ調べ、各フルーツの販売回数をハッシュに記録すること。
  • 最後に、各フルーツの名前と販売回数を画面に出力すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

りんご: 3個
バナナ: 2個
オレンジ: 1個

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.配列 fruits の定義
 1-1. 配列に「りんご」「バナナ」「オレンジ」などのフルーツ名を格納する

2.販売回数をカウントするためのハッシュ fruit_count の定義
 2-1. 空のハッシュを作成して、各フルーツの販売回数を記録する準備をする

3.each メソッドによる配列の繰り返し処理
 3-1. fruits 配列の各要素に対して処理を行う
  3-1-1. フルーツがハッシュに既に存在するかチェック
   3-1-1-1. 存在する場合は、そのフルーツのカウントを1増やす
   3-1-1-2. 存在しない場合は、フルーツのカウントを1に初期化する

4.each メソッドによるハッシュの繰り返し処理
 4-1. fruit_count ハッシュの各キー(フルーツ名)と値(販売回数)を順に表示する

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# フルーツの販売記録
fruits = ["りんご", "バナナ", "りんご", "オレンジ", "バナナ", "りんご"]

# 各フルーツの販売回数を格納するためのハッシュ
fruit_count = {}

# 配列内の各フルーツの販売回数をカウント
fruits.each do |fruit|
  =begin 【穴埋め問題1】
  ここに、すでにそのフルーツがカウントされているかを確認し、カウントを増やすか、新しいカウントを開始するコードを書いてください。
  =end
end

# 各フルーツの販売回数を表示
fruit_count.each do |fruit, count|
  =begin 【穴埋め問題2】
  ここに、フルーツとそのカウントを表示するコードを書いてください。
  =end
end

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

# フルーツの販売記録
fruits = ["りんご", "バナナ", "りんご", "オレンジ", "バナナ", "りんご"]

# 各フルーツの販売回数を格納するためのハッシュ
fruit_count = {}

# 配列内の各フルーツの販売回数をカウント
fruits.each do |fruit|
  if fruit_count[fruit]
    # すでにそのフルーツがカウントされている場合は、カウントを増やす
    fruit_count[fruit] += 1
  else
    # 初めて出現したフルーツの場合は、カウントを1にする
    fruit_count[fruit] = 1
  end
end

# 各フルーツの販売回数を表示
fruit_count.each do |fruit, count|
  puts "#{fruit}: #{count}個"
end

********************

コードの解説

このRubyコードでは、配列(Array)を使って複数のフルーツの販売回数を記録し、それぞれの販売回数をカウントします。

配列やハッシュといったデータ構造を理解することが、プログラミングの基本的なスキルとなります。

このコードを通じて、配列とハッシュの使い方を学びましょう。

配列の定義

fruits = ["りんご", "バナナ", "りんご", "オレンジ", "バナナ", "りんご"]

ここでは fruits という名前の配列を定義しています。配列は複数の値を一つの変数に格納するためのデータ構造です。この例では、「りんご」、「バナナ」、「オレンジ」などのフルーツが含まれています。

配列を使うことで、複数の要素を一括して扱うことができます。

ハッシュの定義

fruit_count = {}

fruit_count は空のハッシュです。ハッシュは、キーと値のペアでデータを管理するデータ構造です。

ここでは、フルーツの名前をキーにし、そのフルーツが何回販売されたかを値として格納します。

配列の各要素を繰り返し処理

fruits.each do |fruit|
  if fruit_count[fruit]
    fruit_count[fruit] += 1
  else
    fruit_count[fruit] = 1
  end
end

each メソッドを使って、配列 fruits の各要素(フルーツの名前)を一つずつ取り出し処理します。

if 文を使って、既にハッシュ fruit_count にそのフルーツが存在している場合はカウントを増やし、存在しない場合は新たにカウントを1として登録します。

この部分は、配列とハッシュを組み合わせてデータを集計する基本的な方法を示しています。

ハッシュの内容を出力

fruit_count.each do |fruit, count|
  puts "#{fruit}: #{count}個"
end

最後に、fruit_count ハッシュを繰り返し処理し、フルーツの名前とその販売回数を出力しています。

puts メソッドを使って、各フルーツの名前とカウント数を表示します。

まとめ

このコードでは、配列ハッシュ という2つのデータ構造を活用しています。

配列を使って複数のデータを一括して管理し、そのデータをハッシュを使って集計・出力しています。

このように、配列をうまく使うことで、繰り返し処理やデータ管理を効率よく行うことができます。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Ruby練習問題集へ戻る
    トップページへ戻る