2012-08-03 59 views
1

Ruby noob here!組和計數結構數組

我有結構看起來像這樣的

Token = Struct.new(:token, :ordinal) 

數組所以這些數組是這樣的,以表格形式:

Token | Ordinal 
--------------- 
    C | 2 
    CC | 3 
    C | 5 

我想組由「令牌「(即左側列)並獲得一個計數,但也保留」序數「元素。所以上面是這樣

Token | Merged Ordinal | Count 
------------------------------ 
    C | 2, 5   | 2 
    CC | 3    | 1 

注意,最後一列是分組標記的計數,中間一欄融合了「序」。第一列(「Token」)可以包含可變數量的字符,並且我想對它們進行分組。

我已經嘗試了各種方法,使用group_by(我可以得到計數,但不是中間列),注入,迭代(似乎不是很實用),但我不能正確的,部分是因爲我不對Ruby和可用的操作/功能沒有很好的掌握。

我也很喜歡周圍的環境,但我並沒有走得太遠。

任何幫助,指針將不勝感激!

+0

你能解釋最後一列嗎?它是數組中的原始索引還是什麼? – Linuxios 2012-08-03 23:23:53

+0

最後一列是這個小組的計數 - 我想我在後面提到 - 對不起,如果不明確! – RobertMS 2012-08-03 23:47:12

+0

我以爲你用令牌來分組他們。 – Linuxios 2012-08-03 23:50:46

回答

2

使用Enumerable#group_by做分組爲你和使用所得到的散列得到你想要與map或類似的東西。

structs.group_by(&:token).map do |token, with_same_token| 
    [token, with_same_token.map(&:ordinal), with_same_token.size] 
end 
+0

謝謝 - 我將如何管理中間欄 - 它基本上是從原始的元素和加入他們的序數。爲了清晰起見,我編輯了我的問題。 – RobertMS 2012-08-04 03:14:35

+0

@RobertMS,這個答案已經解決了你在中間欄的問題。試試看看。如果你想把結果存儲在'Struct'而不是'Array'中,你應該指定。 – 2012-08-04 06:41:42

+0

@Alex D,感謝您的評論 - Marc-Andre親切地編輯了他的帖子和代碼示例,現在我可以看到map/hash如何工作 - 我即將嘗試。我不太關心結果如何存儲,我只需要一點幫助就能形成函數。 – RobertMS 2012-08-04 11:45:35