【Ruby】パーフェクトRuby 学習感想文 ~余談:Arrayクラスの公式ドキュメント
RubyのArray(配列クラス)を確認する。
http://doc.ruby-lang.org/ja/1.9.2/class/Array.html
(参考・経緯など)
パーフェクトRuby 学習感想文 ~はじめに
はい。
割としんどいです。
続けます。
本当はこういう各メソッドの挙動だけではなくて、
どういう思想があってメソッドが存在して、かつ、こういう動きなのか、が分かりたい。。のだけど。
参照渡し?値渡し?
ary = Array.new(3, "foo") p ary #=> ["foo", "foo", "foo"] ary[0].capitalize! p ary #=> ["Foo", "Foo", "Foo"] (各要素は同一のオブジェクトである)
object_idメソッドを使うと良さそう。
確かめよう
ary = Array.new(3, "foo") p "foo".object_id p ary[0].object_id p ary[1].object_id p ary[2].object_id
■実行結果
23863404 23863428 23863428 23863428
なるほど。
おっ、って思ったものメモ
ary = [0, 1, 2, 3, 4, 5] ary[1..3] = "x" p ary # => [0, "x", 4, 5]
===
combinationメソッド、実装どうなってるんだろう。
アルゴリズム、って感じ。↓
a = [1, 2, 3, 4] a.combination(1).to_a #=> [[1],[2],[3],[4]] a.combination(2).to_a #=> [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]] a.combination(3).to_a #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]] a.combination(4).to_a #=> [[1,2,3,4]] a.combination(0).to_a #=> [[]]: one combination of length 0 a.combination(5).to_a #=> [] : no combinations of length 5
===
each_indexメソッドは、最初は必須メソッドだと思ったけど、
while文で表現すれば、使わなくてもいける。
===
ブロックの「何番目」って、nth という変数で書いてる。
いつもどう書いたらスマートか迷ってたんだ。まねしよう。
a = [1, 2, 3, 4, 5] result = a.fetch(10){|nth| ・・・
====
flatten もアルゴリズム、って感じ
a = [1, [2, 3, [4], 5]] p a.flatten #=> [1, 2, 3, 4, 5]
====
s = "" [82, 117, 98, 121].each {|c| p c.chr s << c } p s
■実行結果
"R" "u" "b" "y" "Ruby"
======
a = [1, 2, 3] a.permutation.to_a #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
======
a = [ 1, 2, 3 ] #=> [1, 2, 3] a.shuffle! #=> [2, 3, 1]
いままで、
a = (1..10).to_a.sample(10)
とか、sampleメソッド使ってたけどshuffleのほうが楽や。
=====
何でこの挙動で、メソッド名がzipっていうんだろう
p [1,2,3].zip([4,5,6], [7,8,9]) # => [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
おわり。
やっぱりRubyはアルゴリズムの遊び心があるメソッドがおおい。
こうなるとwhat_methods を使いこなせたほうが便利。
明日はwhat_methodsを便利に使えるように設定しよう。
寝る。。。