我該如何實現?我認爲我的解決方案非常骯髒,我希望能夠做得更好。我認爲在Ruby中有這樣一個簡單的方法,但我不記得了。我想在Rails中使用它,所以如果Rails提供類似的東西,那也可以。用法應該是這樣的:Ruby/Rails:從索引可被x整除的數組中獲取元素
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已經加載之後。我也使用了爲方法提供參數的方式,因爲我認爲這是爲了更好的可讀代碼的目的,而且我是一個可讀性很好的代碼 - 戀物癖:)我擴展了核心類「Array」,現在我可以做這樣的事情,在我的項目中每個陣列以下:
>> 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]
我現在就用它在我的意見,以顯示不同的列從數據庫條目。我喜歡它的是,我不必調用任何緊湊的方法或東西,因爲在將零對象傳遞給視圖時,rails會抱怨。現在它只是工作。我也想過讓JS做的一切,對我來說,但我比較喜歡這種方式,與960網格系統(http://960.gs)
這正是我正在尋找:)謝謝隊友! – 2009-12-12 12:03:02
'odds = fruits - even'這是我喜歡紅寶石的東西 – 2011-11-16 14:48:06