2012-10-25 176 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] } 

哈希标记为{和}。数组是[和]。如果你想有一个数组的数组,你可以使用[和]。