LoginSignup
25
23

More than 5 years have passed since last update.

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

Posted at

最近、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

25
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
23