Recommended
PPTX
PPTX
PDF
PDF
PDF
PDF
Essential Scala 第5章 シーケンス処理
PDF
PPT
PDF
PDF
PDF
PDF
PDF
PDF
ODP
PDF
KEY
Algebraic DP: 動的計画法を書きやすく
PPTX
PDF
すごいHaskell楽しく学ぼう-第12章モノイド-
PDF
PDF
PDF
KEY
PDF
EIDEO servizi ingegneria - Ingegneria avanzata Roma
PDF
PDF
Ipi80700 (1)metameta sionteis
PDF
Презентация к 5 летию дома
DOCX
PDF
PPTX
Convention info d1570.v0.3
More Related Content
PPTX
PPTX
PDF
PDF
PDF
PDF
Essential Scala 第5章 シーケンス処理
PDF
PPT
What's hot
PDF
PDF
PDF
PDF
PDF
PDF
ODP
PDF
KEY
Algebraic DP: 動的計画法を書きやすく
PPTX
PDF
すごいHaskell楽しく学ぼう-第12章モノイド-
PDF
PDF
PDF
KEY
Viewers also liked
PDF
EIDEO servizi ingegneria - Ingegneria avanzata Roma
PDF
PDF
Ipi80700 (1)metameta sionteis
PDF
Презентация к 5 летию дома
DOCX
PDF
PPTX
Convention info d1570.v0.3
PPTX
PPTX
Convention info d1570.v0.3
DOCX
DOC
Seminar 1 penulisan latest
PPTX
Evoltuionof modernathletefinal
DOCX
Dr Pepper Snapple Group Mini Media Kit
Similar to 第3回輪講
PDF
PDF
Ruby初級者向けレッスン 53回 ─── Array と Hash
PPT
PDF
PPTX
PDF
Meta programing ruby monday
PDF
Ruby初級者向けレッスン KOF2015 出張版
PDF
PPTX
PPTX
PDF
PDF
PDF
PDF
PDF
Ruby初級者向けレッスン 56回 ─── ブロック
PDF
PDF
Ruby初級者向けレッスン 54回 ─── クラス
KEY
Clojure programming-chapter-2
PDF
ODP
第3回輪講 1. 2. 3. 1.配列
値の列で、添字によって値にアクセスできるよ
うになっているもの
配列の要素は全て同じクラスである必要はなく、
任意のタイミングで変更できる
配列のサイズは要素を追加すると、必要に応じ
て伸びる
配列の末尾よりも後ろの要素に値を代入すると、
間にnil要素を挟んで自動的に拡張される。しか
し、先頭よりも手前の要素に値を代入しようと
するとエラーになる
4. 配列リテラルは、全体が角かっこで囲まれ、カンマ
で区切られた値のリストである
[1,2,3] #3個のFixnumオブジェクトを保持す
る配列
[-10…0,0…10, ] #2個の範囲から構成される配列。
#末尾のカンマは許される
[[1,2],[3,4],[5]] #ネストされた配列の配列
[x+y,x-y,x*y] #配列要素としては任意の式が使える
[] #空配列のサイズは0
・ %w、%Wは配列リテラルを意味する
・ セパレータの中では、配列要素の文字列を囲む引用
符は不要であり、要素の間にカンマを入れる必要もない
・ 配列要素はカンマで区切られる
words = %w[this is a test] #[„this‟, „is‟, „a‟,
5. 6. ・配列要素の値は、角かっこの中に単一の整数(添字)
を入れたものを使って取得する
a = [0, 1, 4, 9, 16] #添字の自乗を格納する配列
a[0] #先頭の要素は0
a[-1] #末尾の要素は16
a[8] #末尾を越えて読もうとするとnilが返され
る
a[-8] #先頭より手前を読もうとしてもnilが返さ
れる
・上記の式は代入の左辺としても使うことができる
a[0] = “zero” #aは[“zero”, 1, 4, 9, 16]
a[-1] = 1..16 #aは[“zero”, 1, 4, 9, 1..16]
a[-10] = 100 #エラー。
#配列の先頭よりも手前の要素に代入
7. ・先頭インデックスと要素数を表す2個の整数やRange
オブジェクトを添字とすることもできる
a = („a‟..‟e‟).to_a #Rangeが[„a‟, „b‟, „c‟, „d‟, „e‟]に変換され
るa[1,1] #[„b‟] : 要素が1個の配列
a[-2,2] #[„d‟, „e‟] : 末尾の2個の要素
a[0..2] #[„a‟, „b‟, „c‟] : 先頭の3個の要素
・これらの式を代入の左辺として使うと、部分配列を
右辺の配列の要素に置き換えることができる。
・この基本操作は、挿入や削除にも使える
a[0,2] = [„A‟, „B‟] #aは[„A‟, „B‟, „c‟, „d‟, „e‟]になる
a[2…5] = [„C‟, „D‟, „E‟] #aは[„A‟, „B‟, „C‟, „D‟, „E‟]になる
a[0,0] = [1,2,3] #aの先頭に要素を挿入する
a[-1,1] = [„Z‟] #末尾の要素を別の要素に書き換える
8. ・+を使えば、2つの配列を結合できる
a = [1, 2, 3] + [4, 5] #[1, 2, 3, 4, 5]
a = a + [ [6, 7, 8] ] #[1, 2, 3, 4, 5, [6, 7, 8] ]
a = a + 9 #エラー。右辺は配列でなければならない
・+演算子は、両辺の要素を含む新しい配列を作成す
る
・既存の配列の末尾に新しい要素を追加したい場合は
<<を使う
・複数の要素を末尾に追加したい場合はconcatを使う
a=[] #空配列からスタートする
a << 1 #aは[1]になる
a << 2 << 3 #aは[1, 2, 3]になる
a << [4, 5, 6] #aは[1, 2, 3, [4, 5, 6] ]になる
9. ・-演算子は、片方の配列からもう片方の配列を減算す
る
・右辺の要素は、配列内のどの位置にあっても構わない
[„a‟, „b‟, „c‟, „b‟, „a‟] – [„b‟, „c‟, „d‟] #[„a‟, ‟a‟]
・Stringクラスと同様に、Arrayでも乗算演算子を使うと、
反復の意味になる
a = [0] * 8 #[0, 0, 0, 0, 0, 0, 0, 0]
・|は引数を連結し、重複する要素を全て取り除く
・&は両方の引数配列に含まれている要素を集め、重複
を取り除いた配列を返す
a = [1, 1, 2, 2, 3, 3, 4] ; b = [5, 5, 4, 4, 3, 3,
2]
a|b #[1, 2, 3, 4, 5] : 重複が取り除かれている
b|a #[5, 4, 3, 2, 1] : 要素は同じだが、順序は逆
a&b #[2, 3, 4]
10. Arrayクラスの役立つメソッド
・配列の要素を逐次的に処理するために使われる
eachイテレータ
a = („A‟..‟Z‟).to_a #英字の配列を作る
a.each {|x| print x}
#1度に1字ずつアルファベットを出
力する
・調べておくと役に立つArrayメソッド
clear, compact!, delete_if, each_index, empty?, fill,
flatten!, include?, index, join, pop, push, reverse,
reverse_each, rindex, shift, sort, sort!, uniq!,
unshift
11. 2.ハッシュ
キーと呼ばれるオブジェクトの集合を保持し、
個々のキーに値を対応付けているデータ構造
キーを値にマッピングするので、マップとも
呼ばれる
個々のキーから値を連想するように導き出す
ので、連想配列と呼ばれることもある
12. 13. 14. ・ハッシュキーとして文字列よりもSymbolオブジェク
トの方が効率的に使える
numbers = { :one => 1, :two => 2, :three => 3 }
・Symbolとは、intentされたイミュータブルな文字列
で、プレフィックスとしてコロンが付けられた識別子
という形で記述される
numbers = { :one => 1, :two => 2, }
#余分なカンマは無視される
・Ruby1.9は、キーがシンボルのときには、コロンを
ハッシュキーの末尾に移動すると矢印を省略できる
numbers = { one: 1, two: 2,three: 3 }
・ただし、ハッシュキー識別子とコロンの間にスペー
スを入れてはならない
15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ③クラスをチェック(直接比較)
o.class == String #oがStringならtrue
・instance_of?メソッドでも同じことをする
o.instance_of? String #oがStringならtrue
④オブジェクトがそのクラスのサブクラスのインスタ
ンスかどうか
x=1 #この値で操作する
x.instance_of? Fixnum #true: Fixnumのインスタンス
x.instance_of? Numeric #false: x.instance_of? では継承関係が
分からない
x.is_a? Fixnum #true: xはFixnum
x.is_a? Integer #true: xはInteger
x.is_a? Numeric #true: xはNumeric
x.is_a? Comparable #true: ミックスインモジュールにも対応
x.is_a? Object #xがどのような値でもtrue
37. 38. 39. 40. 14.オブジェクトの順序
・クラスは< = >演算子を実装して順序を定義する
1<=>5 # -1: 左辺が右辺よりも小さい
5<=>5 # 0: 両辺が等しい
9<=>5 # 1: 左辺が右辺より大きい
“1” < = > 5 # nil: 整数と文字列は比較できない
・< = >演算子がnilを返した場合、比較演算子はfalseを
返す(Floatの特殊値NaNなど)
nan = 0.0/0.0#0割る0は数値ではない(not a number)
nan < 0 #false: 0より小さくない
nan > 0 #false: 0より大きくない
nan == 0 #false: 0と等しくない
nan == nan #false: 自分自身とさえ等しくない
41. 42. 暗黙の変換
to_int #整数に近くなりたいオブジェクトのためのメ
ソッド
to_str #文字列に近くなりたい
to_ary #配列に近くなりたい
to_hash #ハッシュに近くなりたい
・実装されているものはあまりない
変換関数
・kernelモジュールは、グローバルな変換関数として動
作する4種類の変換メソッドを定義している
Array, Float, Integer, String
・Integer関数は、引数をFixnumかBignumに変換する
・末尾に数字以外の文字が含まれているものは認めな
い
43. 44. 45. 46. 47.