SlideShare a Scribd company logo
2015年6月13日
Ruby初級者向けレッスン 53回
— Array と Hash —
ひがき @ Ruby関西
Array と Hash
• Array とは
• Hash とは
• 繰り返し
• オブジェクトのコピー
Array とは
• 配列クラス
• 任意のオブジェクトを持つことができる
[1, 1, 2, 3]
[1, "2nd", [3, "3"], 4.0, :five]
値へのアクセス
a = ["a", "b", "c", "d", "e"]
a[0] # => "a"
a[1] # => "b"
a[-1] # => "e"
a[1] = "B"
a[3, 2] # => ["d", "e"]
a[1..-2] # => ["B", "c", "d"]
a[5] # => nil
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]
Array の初期化
Array.new(3) # => [nil, nil, nil]
Array.new(3){0} # => [0, 0, 0]
Array.new(3){|i| i.to_s}
# => ["0", "1", "2"]
簡単な Array 操作
a = [1, 1] + [2, 3] # => [1, 1, 2, 3]
a << 5 # => [1, 1, 2, 3, 5]
a << 8 # => [1, 1, 2, 3, 5, 8]
a = a - [3, 1] # => [2, 5, 8]
a = a * 2 # => [2, 5, 8, 2, 5, 8]
a.sort # => [2, 2, 5, 5, 8, 8]
String から Array へ
"Ruby関西".chars
# => ["R", "u", "b", "y", "関", "西"]
"Ruby 関西".scan(/p{Word}+/)
# => ["Ruby", "関西"]
"1,1,2,3,5,8".split(/,/)
# => ["1", "1", "2", "3", "5", "8"]
Array から String へ
[1, 1, 2, 3].to_s # => "[1, 1, 2, 3]"
["matz", 50, "dhh", 35].join(’,’)
# => "matz,50,dhh,35"
"%s(%d)" % ["matz", 50] # => "matz(50)"
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}
値へのアクセス
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 # => {}
sum[:FB] # => 0
sum[:TWTR] += 1
sum # => {:FB=>0, :TWTR=>1}
簡単な Hash 操作
{a: 1, b: 2}.keys # => [:a, :b]
{a: 1, b: 2}.values # => [1, 2]
{a: 1, b: 2}.merge({c: 3})
# => {:a=>1, :b=>2, :c=>3}
{a: 1, b: 2}.merge({a: 0})
# => {:a=>0, :b=>2}
Hash から Array へ
{matz: 50, dhh: 35}.to_a
# => [[:matz, 50], [:dhh, 35]]
[[:matz, 50], [:dhh, 35]].to_h
# => {:matz=>50, :dhh=>35}
Array から Hash へ
a = [:matz, 50, :dhh, 35]
Hash[*a] # => {:matz=>50, :dhh=>35}
繰り返し each
["a", "b", "c"].each{|i| puts i}
["a", "b", "c"].each do |i|
puts i
end
# >> a
# >> b
# >> c
繰り返し Enumerable
• 繰り返しを行なうクラスのための Mix-in
• クラスには each メソッドが必要
Array.ancestors
# => [Array, Enumerable, Object, Kerne
Hash.ancestors
# => [Hash, Enumerable, Object, Kernel
繰り返し 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
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 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‚
b 0 1 2E
dds T   
A
T
演習問題 0
今日のレッスンで分からなかったこと、疑問に
思ったことをグループで話し合ってみよう。
演習問題 1
map を使わずに Array のそれぞれの要素を 2倍
した新しい Array を作ってみよう。
a = [1, 2, 3, 5]
result = []
a.each do |i|
...
result # = [2, 4, 6, 10]
演習問題 2
select を使わずに Array から奇数の要素だけ
を抽出してみよう。
a = [1, 2, 3, 5]
result = []
a.each do |i|
...
result # = [1, 3, 5]
演習問題 3
inject を使わずに Array の要素を合計してみ
よう。
a = [1, 2, 3, 5]
result = 0
a.each do |i|
...
result # = 11
演習問題 4
• Enumerable#map を使ってArray の各要素を
2倍してみよう。
• Enumerable#select を使ってArray から奇
数の要素だけを抽出してみよう。
• Enumerable#inject を使って Arrayの要素
を合計してみよう。
a = [1, 2, 3, 5]
a.map ...
演習問題 5
与えられた文字列から
• 単語の出現回数
• 文字の出現回数
を数えてみよう。
自己紹介
• 名前 (ニックネーム)
• 普段の仕事・研究内容・代表作
• Ruby歴・コンピュータ歴
• 勉強会に来た目的
• などなど
参考
• 公式サイト
https://www.ruby-lang.org/
• るりま
http://docs.ruby-lang.org/ja/
• 解答例
https://github.com/higaki/
learn ruby kansai 67

More Related Content

PPTX
R6パッケージの紹介―機能と実装
PDF
リストモナドを作ってみた
PDF
R6 classes
PDF
Python勉強会3-コレクションとファイル
PDF
FNA provime pranuese teste
PDF
拡張ライブラリ作成による高速化
PDF
R入門(dplyrでデータ加工)-TokyoR42
PDF
Consistent hash
R6パッケージの紹介―機能と実装
リストモナドを作ってみた
R6 classes
Python勉強会3-コレクションとファイル
FNA provime pranuese teste
拡張ライブラリ作成による高速化
R入門(dplyrでデータ加工)-TokyoR42
Consistent hash

What's hot (14)

PPTX
Ext.Directについて
PDF
入門機械学習1,2章
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PPTX
R -> Python
PDF
PDF
20170923 excelユーザーのためのr入門
PDF
RailsエンジニアのためのSQLチューニング速習会
PDF
Haskell勉強会 14.1〜14.3 の説明資料
PDF
[東京] JapanSharePointGroup 勉強会 #2
PPTX
自然言語処理10本ノックで比較する java と kotlin
PDF
KMC JavaScriptから始めるプログラミング2016 第一回
PDF
wakuwaku Scala ~Scala入門勉強会~ 資料
PPTX
入門機械学習6章
PDF
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
Ext.Directについて
入門機械学習1,2章
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
R -> Python
20170923 excelユーザーのためのr入門
RailsエンジニアのためのSQLチューニング速習会
Haskell勉強会 14.1〜14.3 の説明資料
[東京] JapanSharePointGroup 勉強会 #2
自然言語処理10本ノックで比較する java と kotlin
KMC JavaScriptから始めるプログラミング2016 第一回
wakuwaku Scala ~Scala入門勉強会~ 資料
入門機械学習6章
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
Ad

Viewers also liked (14)

PDF
GIB2015_Instruments for Increasing Capital Flows_Alexander
PDF
Презентация ООО "Франчайзинг Интеллект"
PDF
04 sistem rujukan berjenjang
PDF
Metro Manila Office Briefing (Q1 2015)
PDF
INFORMATICA Training, Online INFORMATICA Training
PDF
Jennifer_CV_PORTFOLIO_2015
PPTX
Prezentacja maciej grzmielewski
PPT
Tugas presentasi-hukbis-koperasifinished
DOCX
Pemimpin Otoriter
PDF
GIB2015_Instruments for Increasing Capital Flows_Fischer
PDF
Registrazione Angelica
PPTX
Virginio B. Sala - Testo e testualità la scrittura per l’editoria digitale
PDF
Shahar Cohen CV (EN)
DOCX
Drashyam K Parakh resume
GIB2015_Instruments for Increasing Capital Flows_Alexander
Презентация ООО "Франчайзинг Интеллект"
04 sistem rujukan berjenjang
Metro Manila Office Briefing (Q1 2015)
INFORMATICA Training, Online INFORMATICA Training
Jennifer_CV_PORTFOLIO_2015
Prezentacja maciej grzmielewski
Tugas presentasi-hukbis-koperasifinished
Pemimpin Otoriter
GIB2015_Instruments for Increasing Capital Flows_Fischer
Registrazione Angelica
Virginio B. Sala - Testo e testualità la scrittura per l’editoria digitale
Shahar Cohen CV (EN)
Drashyam K Parakh resume
Ad

Similar to Ruby初級者向けレッスン 53回 ─── Array と Hash (16)

PDF
すごいHaskell読書会#1 in 大阪
PDF
10分で分かるr言語入門ver2.9 14 0920
PPTX
Effective python #5, #6
KEY
Ruby with Hash
ODP
第2回R勉強会1
PDF
Rで学ぶデータマイニングI 第8章〜第13章
PDF
10分で分かるr言語入門ver2.10 14 1101
PDF
Ruby初級者向けレッスン 56回 ─── ブロック
PDF
R language definition3.1_3.2
PDF
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
PPT
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
PDF
R Language Definition 2.2 to 2.3
PDF
Pythonで始めるDropboxAPI
PPT
日本語形態素解析
PDF
Introduction of aws-cli
PPTX
JavaScriptクイックスタート
すごいHaskell読書会#1 in 大阪
10分で分かるr言語入門ver2.9 14 0920
Effective python #5, #6
Ruby with Hash
第2回R勉強会1
Rで学ぶデータマイニングI 第8章〜第13章
10分で分かるr言語入門ver2.10 14 1101
Ruby初級者向けレッスン 56回 ─── ブロック
R language definition3.1_3.2
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
R Language Definition 2.2 to 2.3
Pythonで始めるDropboxAPI
日本語形態素解析
Introduction of aws-cli
JavaScriptクイックスタート

More from higaki (13)

PDF
Ruby初級者向けレッスン KOF2015 出張版
PDF
Ruby初級者向けレッスン 55回 ─── 例外
PDF
Ruby初級者向けレッスン 54回 ─── クラス
PDF
初級者向けレッスン 52回 ─── 文字列
PDF
初級者向けレッスン 51回 ─── 例外
PDF
Ruby初級者向けレッスン 50回 ─── ブロック
PDF
PHPer のための Ruby 教室
PDF
Ruby 初級者向けレッスン 49回───クラス
PDF
Ruby初級者向けレッスン 48回 ─── Array と Hash
PDF
Ruby初級者向けレッスン 47回 ─── 文字列
PDF
Ruby初級者向けレッスン 第46回 ─── Test::Unit
PDF
ジュンク堂書店の方から来ました
PDF
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 54回 ─── クラス
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 51回 ─── 例外
Ruby初級者向けレッスン 50回 ─── ブロック
PHPer のための Ruby 教室
Ruby 初級者向けレッスン 49回───クラス
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 第46回 ─── Test::Unit
ジュンク堂書店の方から来ました
Ruby初級者向けレッスン 45回 ─── 例外

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