Posted at

俺の頭の中ですっかり忘れてるrubyの配列ごにょごにょ

More than 5 years have passed since last update.

最近、rubyめっきり触ってないので、少々健忘症のようになってきています。

再度学習も含めて思い出したのをメモしておく。


配列ごにょごにょ


多重代入

普通につかえるからうれしい。

## これはいまいち

x = 1; y = 2

# こういうのが楽
x, y = 1, 2
x, y = [1, 2]


配列の値の確認

配列に値が含まれているかどうかはArray#inlcude?で。

arr = %w(harry cherry cobby darby)

arr.include?("harry") #=> true
arr.include?("habby") #=> false

配列に複数の値をチェックする場合、Array#- で。

いちいちフラグを立てたりしなくてもいい。

arr = %w(harry cherry cobby darby)

%w(harry cherry) - arr #=> []
(%w(harry cherry cob ) - arr).none? #=> true

%w(harry cherry cob ) - arr #=> ["cob"]
(%w(harry cherry) - arr).none? #=> false


条件で配列の要素を返す

arr = %w(harry cherry cobby darby bob mike)

# 条件を満たすものを返す
arr.select {|s| s.length > 3 } #=> ["harry", "cherry", "cobby", "darby", "mike"]

# 条件を満たさないもの
arr.reject {|s| s.length > 3 } #=> ["bob"]


配列の要素をパターンマッチ

# 条件を満すものを返す

arr = %w(harry cherry cobby darby bob mike)

# 一致するモノ
arr.grep("harry") #=> ["harry"]

# 正規表現で
arr.grep(/by/) # => ["cobby", "darby"]

# 数値や文字列を返す
arr.concat([10,101,1024])

arr.grep(String) #=> ["harry", "cherry", "cobby", "darby", "bob", "mike"]
arr.grep(Numeric) #=> [10, 101, 1024, 10, 101, 1024]


畳み込み

arr = [1,2,3,4,5,6,7,8,9]

# 普通のinject
arr.inject {|r, e| r += e } #=> 45

# こんな書き方あるとは知らなかった。
arr.inject(:+) #=> 45


参考

ほんと素晴らしい。

http://www.amazon.co.jp/dp/4863540221