RubyもしくはRailsで配列を扱う時のtips
Rubyのメソッド
each_with_index
eachと同じ感じなんだけど、何番目かっていう数字を一緒に取れる。ループの外で i = 0
と定義して、ループの中で i += 1
とかやらなくておk。ブロックの第一引数が配列の要素で、第二引数が配列のインデックスです。
%w(a b c d).each_with_index do |value, index|
p value
p index
end
実行結果
"a"
0
"b"
1
"c"
2
"d"
3
all?
ブロックをとって、各要素に対して条件を指定して、全てが true だったら true を返す。
[1,2,3,4].all? do |value|
value > 0
end
実行結果
true
any?
ブロックをとって、各要素に対して条件を指定して、1つでも true だったら true を返す。
[1,2,3,4].any? do |value|
value == 3
end
実行結果
true
–
配列から、特定の物を取り除く時に簡単に使える。例えば、配列をjoinしたいけど、nilは除いてからjoinしたい時とか。
irb(main):021:0> [1,2,nil,4,5,nil] - [nil]
=> [1, 2, 4, 5]
compact
配列から、nilを取り除いた配列を返す。破壊的メソッドは compact!
irb(main):021:0> [1,2,nil,4,5,nil].compact
=> [1, 2, 4, 5]
uniq
配列から重複したものを取り除きたい時。破壊的メソッドは uniq!
irb(main):022:0> [1,1,2,3,4,2,5].uniq
=> [1, 2, 3, 4, 5]
collect (map)
配列の各要素をブロックに渡し、各結果を配列にして返します。破壊的メソッドは collect! 。map と collect は同じ。
irb(main):001:0> [1,2,3,4,5].collect do |i|
irb(main):002:1* i * 10
irb(main):003:1> end
=> [10, 20, 30, 40, 50]
index
引数の値と一致する最初の位置を返します。
irb(main):004:0> %w(a b c d e).index('c')
=> 2
Railsのメソッド
in_groups_of
引数に個数を取って、その個数ごとの配列を生成して、その配列を返してくれる。半端な部分はnilで埋めてくれる。table組むときとか超便利。日本語むずい。
[1,2,3,4,5,6,7].in_groups_of(3) do |group|
?> p group
>> end
[1, 2, 3]
[4, 5, 6]
[7, nil, nil]
=> nil
また今度追記するわ。