More Related Content
Similar to Ruby初級者向けレッスン 48回 ─── Array と Hash
Similar to Ruby初級者向けレッスン 48回 ─── Array と Hash (20)
Ruby初級者向けレッスン 48回 ─── Array と Hash
- 2. Array と Hash
• Array とは
• Hash とは
• Array・Hash オブジェクトの作り方
• 繰り返し
• オブジェクトのコピー
- 4. Array とは (2)
a = [1, "2nd", [3, "3"], 4.0, :five]
a[0] # => 1
a[1] # => "2nd"
a[1] = :two
a[3, 2] # => [4.0, :five]
a[1..-2] # => [:two, [3, "3"], 4.0]
a[5] # => nil
- 5. Array オブジェクトの作り方
["a", "b", "c"] # => ["a", "b", "c"]
("a".."c").to_a # => ["a", "b", "c"]
[*"a".."c"] # => ["a", "b", "c"]
%w[a b c] # => ["a", "b", "c"]
%i[a b c] # => [:a, :b, :c]
- 7. String から Array へ
"No Ruby, No Life.".scan(/w+/)
# => ["No", "Ruby", "No", "Life"]
"Ruby 関西".scan(/p{Word}+/)
# => ["Ruby", "関西"]
"1,1,2,3,5,8".split(/,/)
# => ["1", "1", "2", "3", "5", "8"]
- 8. Array から String へ
["matz", 48, "dhh", 34].join(’,’)
# => "matz,48,dhh,34"
"%s(%d)" % ["matz", 48] # => "matz(48)"
- 9. Hash とは
• 連想配列クラス
• 任意のオブジェクトを持つことができる
• 任意のオブジェクトをキーにできる
{0 => "one", "2" => 3, [4, "4"] => :five}
{:AAPL=>566.71, :GOOG=>605.23}
{AAPL: 566.71, GOOG: 605.23}
# => {:AAPL=>566.71, :GOOG=>605.23}
- 10. Hash とは (2)
h = {:AAPL=>566.71, :GOOG=>605.23}
h[:AAPL] # => 566.71
h[:MSFT] = 31.16
h[:FB] # => nil
- 11. Hash のデフォルト値
sum = Hash.new{|h, k| h[k] = 0}
sum[:FB] # => 0
sum[:TWTR] += 1
sum # => {:FB=>0, :TWTR=>1}
- 12. Hash から Array へ
{matz: 48, dhh: 34}.to_a
# => [[:matz, 48], [:dhh, 34]]
[[:matz, 48], [:dhh, 34]].to_h
# => {:matz=>48, :dhh=>34}
- 13. Array から Hash へ
a = [:matz, 48, :dhh, 34]
Hash[*a] # => {:matz=>48, :dhh=>34}
- 14. 繰り返し each
[0, 1, 2].each{|i| puts i}
[0, 1, 2].each do |i|
puts i
end
# >> 0
# >> 1
# >> 2
- 15. 繰り返し Enumerable
• 繰り返しを行なうクラスのための Mix-in
• クラスには each メソッドが必要
Array.ancestors
# => [Array, Enumerable, Object, Kerne
Hash.ancestors
# => [Hash, Enumerable, Object, Kernel
- 16. 繰り返し Enumerable (2)
a = [1, 2, 3, 5]
a.map{|i| i * i} # => [1, 4, 9, 25]
a.select{|i| i.odd?} # => [1, 3, 5]
a.inject{|s, i| s + i} # => 11
a.find{|i| i.odd?} # => 1
a.all?{|i| i.even?} # => false
a.any?{|i| i.even?} # => true
- 17. inject
a = [1, 2, 3, 5]
a.inject do |s, i|
s # => 1, 3, 6
i # => 2, 3, 5
s + i # => 3, 6, 11
end
- 18. Array のコピー
a = [1, 2, 3]
b = a # => [1, 2, 3]
a[0] = 0
a # => [0, 2, 3]
b # => [0, 2, 3]
- 22. Array のコピー (3)
a = [a, b, c]
b = a.clone # = [a, b, c]
a[0] = A
a # = [A, b, c]
b # = [a, b, c]
- 23. Array のコピー (4)
a = [a, b, c]
b = a.clone # = [a, b, c]
a[1].upcase!
a # = [a, B, c]
b # = [a, B, c]
- 24. Array のコピー (5)
a = [a, b, c]
b = a.clone
a[0] = A
a[1].upcase!
a 0 1 2
a b c
E
© c dd‚
- 25. Array のコピー (5)
a = [a, b, c]
b = a.clone
a[0] = A
a[1].upcase!
a 0 1 2
a b c
E
© c dd‚
b 0 1 2E
dds T
- 26. Array のコピー (5)
a = [a, b, c]
b = a.clone
a[0] = A
a[1].upcase!
a 0 1 2
a b c
E
c dd‚
b 0 1 2E
dds T
A
T
- 27. Array のコピー (5)
a = [a, b, c]
b = a.clone
a[0] = A
a[1].upcase!
a 0 1 2
a B c
E
c dd‚
b 0 1 2E
dds T
A
T
- 29. 演習問題 1
map を使わずに map と同じ結果を作ってみよう。
a = [1, 2, 3, 5]
# a.map{|i| i * i} # = [1, 4, 9, 25]
result = []
a.each do |i|
…
- 30. 演習問題 2
select を使わずに select と同じ結果を作って
みよう。
a = [1, 2, 3, 5]
# a.select{|i| i.odd?} # = [1, 3, 5]