2014年3月29日
Ruby初級者向けレッスン 48回
— Array と Hash —
ひがき @ Ruby関西
Array と Hash
• Array とは
• Hash とは
• Array・Hash オブジェクトの作り方
• 繰り返し
• オブジェクトのコピー
Array とは
• 配列クラス
• 任意のオブジェクトを持つことができる
[1, 1, 2, 3]
[1, "2nd", [3, "3"], 4.0, :five]
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..-...
Array オブジェクトの作り方
["a", "b", "c"] # => ["a", "b", "c"]
("a".."c").to_a # => ["a", "b", "c"]
[*"a".."c"] # => ["a", "b", "c"...
Array の初期化
Array.new(3){0} # => [0, 0, 0]
Array.new(3){|i| i.to_s}
# => ["0", "1", "2"]
String から Array へ
"No Ruby, No Life.".scan(/w+/)
# => ["No", "Ruby", "No", "Life"]
"Ruby 関西".scan(/p{Word}+/)
# => ["Ruby"...
Array から String へ
["matz", 48, "dhh", 34].join(’,’)
# => "matz,48,dhh,34"
"%s(%d)" % ["matz", 48] # => "matz(48)"
Hash とは
• 連想配列クラス
• 任意のオブジェクトを持つことができる
• 任意のオブジェクトをキーにできる
{0 => "one", "2" => 3, [4, "4"] => :five}
{:AAPL=>566.71, :GOOG=...
Hash とは (2)
h = {:AAPL=>566.71, :GOOG=>605.23}
h[:AAPL] # => 566.71
h[:MSFT] = 31.16
h[:FB] # => nil
Hash のデフォルト値
sum = Hash.new{|h, k| h[k] = 0}
sum[:FB] # => 0
sum[:TWTR] += 1
sum # => {:FB=>0, :TWTR=>1}
Hash から Array へ
{matz: 48, dhh: 34}.to_a
# => [[:matz, 48], [:dhh, 34]]
[[:matz, 48], [:dhh, 34]].to_h
# => {:matz=>48, :d...
Array から Hash へ
a = [:matz, 48, :dhh, 34]
Hash[*a] # => {:matz=>48, :dhh=>34}
繰り返し each
[0, 1, 2].each{|i| puts i}
[0, 1, 2].each do |i|
puts i
end
# >> 0
# >> 1
# >> 2
繰り返し Enumerable
• 繰り返しを行なうクラスのための Mix-in
• クラスには each メソッドが必要
Array.ancestors
# => [Array, Enumerable, Object, Kerne
Hash....
繰り返し 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, ...
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
Array のコピー
a = [1, 2, 3]
b = a # => [1, 2, 3]
a[0] = 0
a # => [0, 2, 3]
b # => [0, 2, 3]
Array のコピー (2)
a = [1, 2, 3] a 0 1 2
1 2 3
E
  © c dd‚
b = a
a[0] = 0
Array のコピー (2)
a = [1, 2, 3] a 0 1 2
1 2 3
E
  © c dd‚
b = a b  
 
 
a[0] = 0
Array のコピー (2)
a = [1, 2, 3] a 0 1 2
1 2 3
E
c dd‚
b = a b  
 
 
a[0] = 0 0
c
Array のコピー (3)
a = [a, b, c]
b = a.clone # = [a, b, c]
a[0] = A
a # = [A, b, c]
b # = [a, b, c]
Array のコピー (4)
a = [a, b, c]
b = a.clone # = [a, b, c]
a[1].upcase!
a # = [a, B, c]
b # = [a, B, c]
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‚
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   
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
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
演習問題 0
今日のレッスンで分からなかったこと、疑問に
思ったことをグループで話し合ってみよう。
演習問題 1
map を使わずに map と同じ結果を作ってみよう。
a = [1, 2, 3, 5]
# a.map{|i| i * i} # = [1, 4, 9, 25]
result = []
a.each do |i|
…
演習問題 2
select を使わずに select と同じ結果を作って
みよう。
a = [1, 2, 3, 5]
# a.select{|i| i.odd?} # = [1, 3, 5]
演習問題 3
inject を使わずに inject と同じ結果を作って
みよう。
a = [1, 2, 3, 5]
# a.inject{|s, i| s + i} # = 11
演習問題 4
与えられた文字列から
• 単語の出現回数
• 文字の出現回数
を数えてみよう。
自己紹介
• 名前 (ニックネーム)
• 普段の仕事・研究内容・代表作
• Ruby歴・コンピュータ歴
• 勉強会に来た目的
• などなど
参考
• 公式サイト
https://www.ruby-lang.org/
• るりま
http://docs.ruby-lang.org/ja/
• 解答例
https://github.com/higaki/
learn ruby kans...
Upcoming SlideShare
Loading in …5
×

Ruby初級者向けレッスン 48回 ─── Array と Hash

629 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
629
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ruby初級者向けレッスン 48回 ─── Array と Hash

  1. 1. 2014年3月29日 Ruby初級者向けレッスン 48回 — Array と Hash — ひがき @ Ruby関西
  2. 2. Array と Hash • Array とは • Hash とは • Array・Hash オブジェクトの作り方 • 繰り返し • オブジェクトのコピー
  3. 3. Array とは • 配列クラス • 任意のオブジェクトを持つことができる [1, 1, 2, 3] [1, "2nd", [3, "3"], 4.0, :five]
  4. 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. 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]
  6. 6. Array の初期化 Array.new(3){0} # => [0, 0, 0] Array.new(3){|i| i.to_s} # => ["0", "1", "2"]
  7. 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. 8. Array から String へ ["matz", 48, "dhh", 34].join(’,’) # => "matz,48,dhh,34" "%s(%d)" % ["matz", 48] # => "matz(48)"
  9. 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. 10. Hash とは (2) h = {:AAPL=>566.71, :GOOG=>605.23} h[:AAPL] # => 566.71 h[:MSFT] = 31.16 h[:FB] # => nil
  11. 11. Hash のデフォルト値 sum = Hash.new{|h, k| h[k] = 0} sum[:FB] # => 0 sum[:TWTR] += 1 sum # => {:FB=>0, :TWTR=>1}
  12. 12. Hash から Array へ {matz: 48, dhh: 34}.to_a # => [[:matz, 48], [:dhh, 34]] [[:matz, 48], [:dhh, 34]].to_h # => {:matz=>48, :dhh=>34}
  13. 13. Array から Hash へ a = [:matz, 48, :dhh, 34] Hash[*a] # => {:matz=>48, :dhh=>34}
  14. 14. 繰り返し each [0, 1, 2].each{|i| puts i} [0, 1, 2].each do |i| puts i end # >> 0 # >> 1 # >> 2
  15. 15. 繰り返し Enumerable • 繰り返しを行なうクラスのための Mix-in • クラスには each メソッドが必要 Array.ancestors # => [Array, Enumerable, Object, Kerne Hash.ancestors # => [Hash, Enumerable, Object, Kernel
  16. 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. 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. 18. Array のコピー a = [1, 2, 3] b = a # => [1, 2, 3] a[0] = 0 a # => [0, 2, 3] b # => [0, 2, 3]
  19. 19. Array のコピー (2) a = [1, 2, 3] a 0 1 2 1 2 3 E   © c dd‚ b = a a[0] = 0
  20. 20. Array のコピー (2) a = [1, 2, 3] a 0 1 2 1 2 3 E   © c dd‚ b = a b       a[0] = 0
  21. 21. Array のコピー (2) a = [1, 2, 3] a 0 1 2 1 2 3 E c dd‚ b = a b       a[0] = 0 0 c
  22. 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. 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. 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. 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. 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. 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
  28. 28. 演習問題 0 今日のレッスンで分からなかったこと、疑問に 思ったことをグループで話し合ってみよう。
  29. 29. 演習問題 1 map を使わずに map と同じ結果を作ってみよう。 a = [1, 2, 3, 5] # a.map{|i| i * i} # = [1, 4, 9, 25] result = [] a.each do |i| …
  30. 30. 演習問題 2 select を使わずに select と同じ結果を作って みよう。 a = [1, 2, 3, 5] # a.select{|i| i.odd?} # = [1, 3, 5]
  31. 31. 演習問題 3 inject を使わずに inject と同じ結果を作って みよう。 a = [1, 2, 3, 5] # a.inject{|s, i| s + i} # = 11
  32. 32. 演習問題 4 与えられた文字列から • 単語の出現回数 • 文字の出現回数 を数えてみよう。
  33. 33. 自己紹介 • 名前 (ニックネーム) • 普段の仕事・研究内容・代表作 • Ruby歴・コンピュータ歴 • 勉強会に来た目的 • などなど
  34. 34. 参考 • 公式サイト https://www.ruby-lang.org/ • るりま http://docs.ruby-lang.org/ja/ • 解答例 https://github.com/higaki/ learn ruby kansai 60

×