- ここまで出来る!RubyのSplat Operatorまとめ - RailsとRubyとVimのブログ http://alpaca.tc/blog/ruby/how-to-use-star.html
- splat での Array 式展開 - Qiita http://qiita.com/hotchpotch/items/4228405cb0edc734fac3
引数をまとめて渡す | Ruby
組み合わせを作る時に悩んだので覚え書き。
productメソッド(Array)
` array.product(other_array, …) `
問題:
複数の入力があり、データベースから当てはまる要素をもつ配列をそれぞれ生成し、 それらの配列から組み合わせを生成する。
入力の数が3つ、とかの時に
requests = ["foo","bar","baz"]
array = []
requests.each do |request|
array << DB.collect{|item| item.include?(request)}
end
array[0].product(array[1],array[2])
みたいな感じで書いてた。
ばってん入力の数を可変にしようと思ったときに、productの引数どうしよう。ってなった。
調べてみると splat展開 とやらが使えそう。
` [*0…5] #=> [0, 1, 2, 3, 4] `
` [*‘abcde’] #=> [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]`
つまり
` [*Array.new(3){ | i | Array.new(2){ | j | (i*2)+j}}] #=> [[0,1], [2,3], [4,5]]` |
ということで最初のコードを書き直してみる。
requests = ["foo","bar","baz", ... ]
array = []
requests.each do |request|
array << DB.collect{|item| item.include?(request)}
end
head = array.shift
head.product(*array)
やったね!
そもそももっとスマートに組み合わせ作れるよって意見もあると思うけど、覚え書きという事でひとつ…
こういう書き方あるよってのがあればリプライ投げつけてください。
参考
« Previous
3 of 3