Rubyで配列操作
Rubyでの配列操作をまとめてみました。
0. 定義
他にもStringクラスのsplitなどでも作り出せますね。
a = [1 ,2, 3] b = %w[str1 str2 str3] # ["str1", "str2", "str3"]
1.ランダムアクセス
a[0] # 最初の要素 a[-1] # 最後の要素 a[0..2] # インデクス0からインデクス2まで a[0..2] = [11, 12, 13] # 代入もできる(slice的な) a[0, 2] # インデクス0から2個
2.追加/取り出し
a << 100 # 末尾に追加 a.push 200 # 末尾に追加 a.pop # 末尾から取り出し a.unshift 300 # 先頭に追加 a.shift # 先頭から取り出し
スタックを作りたい: push+popの組み合わせ、またはunshift+shiftの組み合わせ
キューを作りたい: push+shiftに組み合わせ、またはunshift+popの組み合わせ
3.集合演算
この機能が組み込みで使えるのは結構便利だと思う。
チェックボックスをつけたりはずしたりで、任意の集合を既存の選択と新しい選択の集合から永続化されたデータを更新するときとか。
[1, 2, 3] & [1, 2, 4] #=> [1, 2] 積集合 [1, 2, 3] | [1, 2, 4] #=> [1, 2, 3, 4] 和集合 [1, 2, 3] - [1, 2, 4] #=> [3] 差集合
4.全体への操作/検索
mapはPerlと同じ、Perlのgrepはselect。
Rubyにもgrepメソッドはあるが引数が正規表現のみ。
メソッドの最後にビックリマークをつけると自分自身を変更したりする。
a = [1, 2, 3] a.size #=> 3 (配列の大きさ, lengthもあり) a.map{|x| x*3 } #=> [3, 6, 9] a.select{|x| x%2==0 } #=> [2] b = [1, nil, 3] b.conpact #=> [1, 3] (nilを取り除く, b.select{|x| x != nil }) b.index(nil) #=> 1 (引数の要素が最初に出てくるindex) a.reverse #=> [3, 2, 1] x = [2, 3, 1] x.sort{|a,b| a<=>b } # 昇順ソート(1.8だとスコープが見えるa,bの内容を上書きするので注意) x.join("-") #=> "2-3-1" y = [1, 1, 2, 3, 4, 5, 5] y.uniq #=> [1, 2, 3, 4, 5] [1, 2].concat([3, 4]) #=> [1, 2, 3, 4] (配列の連結)
5.繰り返し処理
PerlやPHPならforeach
値を変更するだけならmap!とかもあり。
フィルタリングを行いたいならselectやdelete_if(reject!)も検討すべき。
x = %w[iMac iBook iPod iPhone iPad] x.each do |product| puts "Say hello to #{product}" end