まずは、配列の要素を順番に表示する例です。
numbers = [1, 2, 3, 4, 5]
numbers.each do |number|
puts number
end
コンソールの表示結果:
1
2
3
4
5
次に、ハッシュの要素をeachを使って処理する例です。
person = { name: 'Alice', age: 30, occupation: 'Engineer' }
person.each do |key, value|
puts "#{key}: #{value}"
end
コンソールの表示結果:
name: Alice
age: 30
occupation: Engineer
こちらがコンソール上で実行した結果です。irbコンソールでコードを実行すると、配列やハッシュの要素が順番に表示されることが確認できます。コードを試してみて、動作を確認してみてください。
ハッシュとは
複数の値をまとめて管理する方法としては、配列の他にもハッシュというものがあります。
配列は複数の値を並べて管理するのに対して、ハッシュはそれぞれの値にキーと呼ばれる名前をつけて管理します。
#配列
[値1, 値2]
#ハッシュ
{キー1 => 値1, キー2 => 値2}
# ハッシュの作成
person = {
name: 'Alice',
age: 30,
occupation: 'Engineer'
}
# ハッシュの要素にアクセス
puts person[:name] # キーを指定して値を取得
# ハッシュの要素の追加
person[:location] = 'New York'
# ハッシュの要素の変更
person[:age] = 31
# ハッシュの要素の削除
person.delete(:occupation)
# ハッシュの要素を順番に処理
person.each do |key, value|
puts "#{key}: #{value}"
end
コンソールの表示結果:
Alice
name: Alice
age: 31
location: New York
シンボルとは
シンボル(Symbol)は、Rubyプログラミング言語において使われるデータ型の一つです。シンボルは、テキストを表現するための一意の識別子であり、文字列と似たような役割を果たしますが、いくつかの重要な違いがあります。
主な特徴や用途は以下の通りです:
一意性: シンボルはプログラム全体で一意です。同じシンボルを複数回使用しても、内部的には同じオブジェクトを共有します。これに対して、文字列は内容が同じでも別々のオブジェクトとして扱われます。
高速な比較: シンボルは内部的に整数として扱われるため、文字列と比較するよりも高速です。これは、ハッシュキーなど識別子として使う際に有用です。
メモリ効率: 同じシンボルはプログラム内で共有されるため、メモリ効率が高いです。一方、文字列は異なる箇所で使われるたびに新しいオブジェクトが作成されるため、メモリ使用量が大きくなる可能性があります。
シンボルはコロン(:``)を前につけて定義されます。例えば、:nameや:age`などがシンボルです。
:name
:age
:occupation
シンボルは主にハッシュのキーやメソッド名、定数名などの識別子として利用されます。以下は、シンボルの使用例です。
person = {
name: 'Alice',
age: 30,
occupation: 'Engineer'
}
puts person[:name] # ハッシュからシンボルを使用して値を取得
また、メソッド名としてのシンボルの使用例も示します。
def greet(name)
puts "Hello, #{name}!"
end
greet(:Alice) # シンボルを引数として渡す
シンボルはRubyの重要な概念であり、効率的で一意な識別子を作成する際に活用されます。
キーがシンボルのハッシュの省略
通常、ハッシュリテラルを作成する場合は、以下のようにキーと値のペアを中括弧 {} 内に記述します。
hash = { :key1 => value1, :key2 => value2, :key3 => value3 }
しかし、キーがシンボルの場合は、上記の記述を次のように省略することができます。
hash = { key1: value1, key2: value2, key3: value3 }
この省略形式は、シンボルをキーとして使用する場合に特に便利です。以下は具体的な例です。
person = {
name: 'Alice',
age: 30,
occupation: 'Engineer'
}
この例では、キーがシンボルのハッシュを簡潔に作成しています。このようにすることで、可読性が向上し、記述量も減少します。
配列の場合の操作例
students = [
{name: "Alice", age: 20}, // ←インデックス番号0
{name: "Bob", age: 22} // ←インデックス番号1
]
# インデックス番号が0の要素の、キーが「:age」の値を出力
puts students[0][:age] //20
each メソッドを使用して、students 配列の各要素に対して処理を行う例
students = [
{name: "Alice", age: 20},
{name: "Bob", age: 22}
]
# 各要素の年齢を出力する
students.each do |student|
puts student[:age]
end
出力結果:
20
22
もう一つの例
exams = [
{subject: "English", score: 90},
{subject: "History", score: 75}
]
# each文を用いて、要素ごとに「○○の結果は△△点です」と出力する
exams.each do |exam|
puts "#{exam[:subject]}の結果は#{exam[:score]}点です"
end
コードを実行すると、次のように出力されます。
Englishの結果は90点です
Historyの結果は75点です
ミックス
products = [
{name: "スマートフォン", price: 50000},
{name: "ノートパソコン", price: 80000},
{name: "ヘッドフォン"}
]
products.each do |product|
puts "--------------------"
puts "商品名: #{product[:name]}"
# キー:priceの値に応じて価格の情報を出力する
if product[:price]
puts "価格: #{product[:price]}円"
else
puts "価格情報はありません"
end
end
この例では、異なる商品の情報が products 配列に含まれています。name キーは必ず存在し、price キーがある場合に価格の情報が出力されます。
コードを実行すると、次のように出力されます。
--------------------
商品名: スマートフォン
価格: 50000円
--------------------
商品名: ノートパソコン
価格: 80000円
--------------------
商品名: ヘッドフォン
価格情報はありません