2012-10-25 181 views
0

陣列上我在Ruby的數組,它看起來像這樣:哈希在Ruby中

@arr = [ [2.1, pass], 
     [2.1, fail], 
     [2.1, pass], 
     [2.1, unknown], 
     [2.1, pass], 
     [3.0, pass], 
     [3.0, unknown], 
     [3.1, pass], 
     [3.1, fail] ] 

我想申請某種散列或計算就可以了,使得我的輸出應該是這樣的一個數組:

@result = [ [2.1, 3, 1, 1], 
      [3.0, 1, 0, 1], 
      [3.1, 1, 1, 0] ] 

輸出陣列顯示結果以這種格式{版本,節數通,節數失敗,節數未知}

+5

你張貼什麼是不正確的Ruby。 – Larsenal

回答

3

如果我翻譯你的表情有點...

@arr = [ 
    [2.1, :pass], 
    [2.1, :fail], 
    [2.1, :pass], 
    [2.1, :unknown], 
    [2.1, :pass], 
    [3.0, :pass], 
    [3.0, :unknown], 
    [3.1, :pass], 
    [3.1, :fail]] 

那麼問題就可以......可以解決

@arr.group_by(&:first).values.map do |x| 
    y = x.flatten 
    [y[0], y.count(:pass), y.count(:fail), y.count(:unknown)] 
end 
+0

噢,如果你想DIE /幹三個'count'方法調用,我想你可以這樣做:'[:pass,:fail,:unknown] .map {| e | y.count e}' – DigitalRoss

+0

'pass','fail'和'unknown'都是我陣列中的字符串。我試過上面的代碼。我有一個問題。 y是輸出數組嗎?如果是的話,我如何在我的html.erb文件中訪問該文件.....我通常在變量名之前放置一個@以從我的視圖(html.erb)文件中訪問它。 –

+0

'y'只是傳遞給'#map'的塊內的臨時內容。我沒有顯示輸出變量。它看起來像'@result = @ arr.group_by(&:first)...'或者只是'result = ...'。您可以將我的示例粘貼到irb中並嘗試使用它,也可以使用Strings而不是符號等。 – DigitalRoss

0

這些都是無效散列。哈希必須有與它們相關的鍵。這是初始示例中陣列的哈希值:

@arr = { something: [2.1, pass], 
     somethingelse: [2.1, fail], 
     another: [2.1, pass], 
     andanother: [2.1, unknown], 
     whatever: [2.1, pass], 
     whateverelse: [3.0, pass], 
     key: [3.0, unknown], 
     anotherkey: [3.1, pass], 
     yetanother: [3.1, fail] } 

哈希標記爲{和}。數組是[和]。如果你想有一個數組的數組,你可以使用[和]。