楽しいRuby 第4版 Arrayクラス
楽しいRubyで残しときたいメモが以外に多いので分ける。
わかったことと練習問題の回答を記す。
練習問題はできる限り自信の回答を記すが、うまく行かない場合、
回答を貼ることもあります。ネタバレ注意
今回は多分自分だけではないはず、初心者大好きArrayクラス
集合としての配列
&
共通集合 2つのarrayの中から同じ要素をピックアップする。
|
和集合 2つのarrayをくっつける。+でくっつけると全要素が全てくっつく。
num = [1, 2, 3] even = [2, 4, 6] p (num + even) # => [1, 2, 3, 2, 4, 6] p (num | even) # => [1, 2, 3, 4, 6]
列としての配列
スタック
LIFO 1入れる 2取り出す 最後に入れたものを最初に取り出す
メソッド push 配列の一番後ろに入れる
メソッド pop 末尾の要素を取り除く
先頭要素に対する操作 | 末尾要素に対する操作 | |
---|---|---|
要素を加える | unshift | push |
要素を取り除く | shift | pop |
要素を参照する | first | last |
配列の主なメソッド
練習問題
1から100までの配列を作る
a = [] # 配列を作る for i in 1..100 a << i #数字を入れていく end
これはできた。
さっき作った配列の要素を100倍する。元の配列を破壊する
a.map!{
|i| i * 100
}
これもできた。
最初にできた配列から3の倍数だけにした新しい配列を作る
a.reject!{|i| i % 3 != 0 }
これもなんとかできた。
最初にできた配列を逆順に並べる
a.reverse!
これはできた。
最初に作った配列から10個ずつを1つの配列として、新しい配列の中に格納していく。
result = Array.new 10.times do |i| result << a.slice!(0, 10) #aの配列のインデックス0から10個の配列を抜き出し、resultに格納していく。 end p result
これは本を読まないとわからなかった。slice!を使うことはなんとなく把握できたが引数の指定の仕方がわからなかった。
以下の結果を返すsum_arrayメソッドを定義する
p sum_array([1, 2, 3], [4, 6, 8]) #=> [5, 8, 7]
def sum_array(x, y) a = [] s = x.zip(y) s.each do |i| a << i[0] + i[1] end p a end sum_array([1, 2, 3], [4, 6, 8])
これより絶対良い簡単なメソッドがあるはず。。。
配列は素人目には理解しやすいしメソッドが楽しいけど、
実際プログラミングで使うと奥が深すぎるんじゃないかと思う。