ponkiti's blog

主に自分用、イベント参加メモや備忘録として利用

Ruby入門メモ(2)

配列オブジェクト

Arrayリファレンスを参照。

例1

price = [500, 800, 100]

p price[0]
price[0] = 10   # 書き替え
p price[0]

price[4] = 300  # 配列の範囲外にも要素が追加できる
p price

p price[0..2]   # 添字0〜2(0,1,2)の要素を返す
p price[0...2]  # 添字0〜2未満(0,1)の要素を返す

p price[-1]     # 負の数を指定した場合、末尾から逆順に数えた要素を返す
p price[1, 2]   # 1つ目の要素から2つ分を返す

実行結果

500
10

[10, 800, 100, nil, 300]

[10, 800, 100]
[10, 800]

300
[800, 100]

例2

sales = [5, 8, 4]
p sales

sales[0...2] = [1, 2]      # 添字0〜2未満の要素を[1, 2]に書き換える
p sales

sales[1, 0] = [10, 11, 12] # 添字1から0個分の要素を[10, 11, 12]に書き換える
p sales

sales[0, 2] = []           # 添字0から2個分の要素を削除する
p sales

実行結果

[5, 8, 4]
[1, 2, 4]
[1, 10, 11, 12, 2, 4]
[11, 12, 2, 4]

例3

sales = [1, 10, 11, 12, 2, 4]

p sales.size        # 配列の要素数を数える
p sales.sort        # 配列を昇順に並び替える

# 配列を昇順に並び替え、さらに、それを逆順に並び替える
# メソッドはピリオドで繋ぐことができる
p sales.sort.reverse

p sales.push(100)   # 末尾に要素を追加する
sales << 100 << 102 # 末尾に要素を追加する
p sales

実行結果

6
[1, 2, 4, 10, 11, 12]

[12, 11, 10, 4, 2, 1]

[1, 10, 11, 12, 2, 4, 100]
[1, 10, 11, 12, 2, 4, 100, 100, 102]

ハッシュオブジェクト

Hashリファレンスを参照。

基本形

keyとvalueを指定する。

price = {"hoge" => 200, "huga" => 300}
p price["hoge"]
p price

実行結果

200
{"hoge"=>200, "huga"=>300}

シンボル

keyが文字列の場合、シンボル(コロンのあとに文字列を書く)という書き方ができる。
シンボルは識別子として使えるオブジェクトで、文字列を使うよりも早い。

price = {:hoge => 200, :huga => 300}
p price[:huga] # 300
p price

実行結果

300
{:hoge=>200, :huga=>300}

Ruby1.9から対応した書き方

price = {hoge: 200, huga: 300}
p price[:hoge] #シンボルでアクセス
p price

実行結果

200
{:hoge=>200, :huga=>300}

Hashクラスのメソッド

p price.size
p price.keys
p price.values
p price.has_key?(:hoge)

実行結果

2
[:hoge, :huga]
[200, 300]
true

ハッシュと配列の相互変換

h = {ponkiti: 100, pon: 200}
p h           # ハッシュ
p h.to_a      # 配列へ変換
p h.to_a.to_h # 配列へ変換した上で、さらに、ハッシュに変換する

実行結果

{:ponkiti=>100, :pon=>200}
[[:ponkiti, 100], [:pon, 200]]
{:ponkiti=>100, :pon=>200}

%記号

文字列や配列を指定する場合に%記号を使うこともできる。

例1

s = "hello"

s = %Q(hello)
s = %(hello) # Qは省略可

# Perlのクォート構文みたいな使い方
# カッコ以外の記号も使うことができる
s = %Q!hello!
s = %Q{hello}

実行結果
どの書き方でも出力内容は同じになる。

"hello"

例2

s = "he\"llo" # "のエスケープには\を使う
s = %Q(he"llo)

実行結果
p sputs sでそれぞれ標準出力させた内容は下記のとおり。

"he\"llo"
he"llo

例3

s = 'he”\llp'  # 文字列をシングルクォーテーションで囲う場合
p s
puts s

s = %q(he"llo) # 大文字Qではなく、小文字のqを使う
p s
puts s

実行結果

"he”\\llp"
he”\llp
"he\"llo"
he"llo

例4

a = ["a", "b", "c"]
a = %W(a b c) # 文字列の場合のみ、%Wで配列が記述できる

a = ['a', 'b', 'c']
a = %w(a b c) # %Qと同様に、シングルクォーテーションの場合は、小文字のwを使う

実行結果
p sputs sでそれぞれ標準出力させた内容は下記のとおり。

["a", "b", "c"]
a
b
c