2014-02-25 32 views
0

好了,所以我有這個數組對象我怎麼能集團Ruby對象基礎上,未來價值

pry(main)> @something.objects 
=> [#<Object id: 2, position: 1, some_type: "Header", entryable_id: 6>, 
=> [#<Object id: 3, position: 2, some_type: "Content", entryable_id: 32>, 
=> [#<Object id: 4, position: 3, some_type: "Content", entryable_id: 11>, 
=> [#<Object id: 6, position: 4, some_type: "Header", entryable_id: 15>, 
=> [#<Object id: 7, position: 5, some_type: "Content", entryable_id: 41>, 
=> [#<Object id: 8, position: 6, some_type: "Header", entryable_id: 109>, 

的我要的是下一個內容分組的頭就像

[{ 
    header: #<Object id: 2, position: 1, some_type: "Header", entryable_id: 6, 
    content: [#<Object id: 3, position: 2, some_type: "Content", entryable_id: 32>, #<Object id: 4, position: 3, some_type: "Content", entryable_id: 11>]}, 
    header: #<Object id: 6, position: 4, some_type: "Header", entryable_id: 15>, 
    content: [#<Object id: 7, position: 5, some_type: "Content", entryable_id: 41>], 
    content: #<Object id: 8, position: 6, some_type: "Header", entryable_id: 109> 
] 

所以基本上所有對象都有一個位置,我想將所有Headers與下一個「Content」組合在一起,直到出現另一個頭部爲止......我正在考慮循環遍歷對象並創建一個哈希數組,但我想知道是否存在是一種最佳的方式,可能與數據庫或其他方法

+0

我們無法運行此,給予一定的樣本數據,從我們得到的想法.. –

回答

7

slice_before是你在找什麼。

@something.slice_before {|e| e.some_type == "Header"}.flat_map { |h, *c| {:header => h, :content => c} } 
+0

+1這基本上是什麼OP是尋找。下面是一個快速示例:'[1,2,3,'a',4,5,6,'a',7,8,9,'a',1,3,5] .slice_before {| i |我=='a'}。to_a' – Matt

+2

我會添加'.flat_map {| h,* c | {:header => h,:content => c}}'來匹配問題 –