どうすればこれを実装できますか?私の解決策は非常に汚いと思います、そして私はそれをもっと良くしたいと思います。Rubyでこれを行う簡単な方法があると思いますが、思い出せません。Railsで使いたいので、Railsが似たようなものを提供していれば大丈夫です。使用法は次のようになります。
fruits = ['banana', 'strawberry', 'kiwi', 'orange', 'grapefruit', 'lemon', 'melon']
# odd_fruits should contain all elements with odd indices (index % 2 == 0)
odd_fruits = array_mod(fruits, :mod => 2, :offset => 0)
# even_fruits should contain all elements with even indices (index % 2 == 1)
even_fruits = array_mod(fruits, :mod => 2, :offset => 1)
puts odd_fruits
banana
kiwi
grapefruit
melon
puts even_fruits
strawberry
orange
lemon
******* 編集 *******
知りたい人のために、それは私が最終的にしたことです:
Railsプロジェクトで、config/initializers/columnize.rb
次のような新しいファイルを作成しました。
class Array
def columnize args = { :columns => 1, :offset => 0 }
column = []
self.each_index do |i|
column << self[i] if i % args[:columns] == args[:offset]
end
column
end
end
Railsは、Railsがロードされた直後に、これらのファイルを自動的にロードします。私はまた、メソッドに引数を提供するための手ごわい方法を使用しました。これは、より読みやすいコードの目的に役立つと思います。私は読みやすいコードフェチです:)コアクラス「配列」を拡張しました。プロジェクト内のすべての配列で次のようなことができます。
>> arr = [1,2,3,4,5,6,7,8]
=> [1, 2, 3, 4, 5, 6, 7, 8]
>> arr.columnize :columns => 2, :offset => 0
=> [1, 3, 5, 7]
>> arr.columnize :columns => 2, :offset => 1
=> [2, 4, 6, 8]
>> arr.columnize :columns => 3, :offset => 0
=> [1, 4, 7]
>> arr.columnize :columns => 3, :offset => 1
=> [2, 5, 8]
>> arr.columnize :columns => 3, :offset => 2
=> [3, 6]
これを使用して、データベースのエントリをビューのさまざまな列に表示します。私が気に入っているのは、nilオブジェクトをビューに渡すとレールが文句を言うので、コンパクトなメソッドなどを呼び出す必要がないことです。今ではうまくいきます。また、JSにすべてを任せることも考えましたが、960グリッドシステム(http://960.gs)を使用して、この方法の方が気に入っています。