Ruby 比较多维散列

Ruby 比较多维散列,ruby,hash,multidimensional-array,Ruby,Hash,Multidimensional Array,我有一个巨大的散列(JSON),我想通过删除不同的值然后合计一个值集,将其与“主密钥”进行比较 我认为这将是一个处理复杂评分标准的考试评分的好方法 关于如何做到这一点的建议?有什么可以让我的生活更轻松的宝石吗 { "A" => 10, "B" => 7, etc .... 散列的构造类似于test[answer]=>test[point\u value],而问题键/值就是答案/分值 因此,如果我想与主密钥进行比较并删除不同的项(而不是删除类似的项,如arr1-a

我有一个巨大的散列(JSON),我想通过删除不同的值然后合计一个值集,将其与“主密钥”进行比较

我认为这将是一个处理复杂评分标准的考试评分的好方法

关于如何做到这一点的建议?有什么可以让我的生活更轻松的宝石吗

{
  "A" => 10,
  "B" => 7,
  etc
    ....
散列的构造类似于
test[answer]=>test[point\u value]
,而问题键/值就是答案/分值


因此,如果我想与主密钥进行比较并删除不同的项(而不是删除类似的项,如
arr1-arr2
does…,那么合计值,最好是什么?

将哈希转换为ruby哈希后,我会这样做

 tester = { :"first" =>  { :"0" => { :"0" => { :"B" => 10 }, :"1" => { :"B" => 7 }, :"2" => { :"B" => 5 } } }}
 master = { :"first" => { :"0" => { :"0" => { :"A" => 10 }, :"1" => { :"B" => 7 }, :"2" => { :"B" => 5 } } }}
tester.reduce(0) do |score, (test,  section)| 
  section.each do |group, questions|
    questions.each do |question, answer|
      if answer.keys.first == master[test][group][question].keys.first
        score += answer.values.first
      end
    end
  end
  score
end

从你的例子来看,第一个问题是“A”,答案是“10”?或者答案是“A”,如果你得到这个答案,你得10分,如果答案不是“A”,你就得不到任何分数?答案是“A”,如果答案是正确的,你得10分,如果答案不是“A”,你得到0。我想我应该把它简化为1D数组…我如何将它展平并简化为“a”:“10”?数组对象有一个
展平
方法。它只展平第一级,如果你想让它递归,你必须指定一个数字。我已经将它展平为:
[{“a”=>10},{“B”=>7}.]
:)你能更新吗?我会马上更新我的问题…我发帖的时候没想过。没有理由这么做——这些都来自我的json方面。:)你的更新是一个散列,你的评论是一个散列数组,它是哪一个?两者都不太难与母版相比,我会在你回复我时更新只是一个散列,不再是多维的,尽管你可以更新…不必完全删除一个好的答案。我以后可能会再提到这一点,我认为你仍然需要指定某个答案对应于什么问题。散列是无序的(从技术上讲,它们在ruby中保持顺序,但在我看来,做出这种假设是不好的做法),因此您不能依赖这样一个事实,即主密钥的第一个密钥表示与测试散列的第一个密钥相同的答案。所以我可能需要散列
{0=>{A=>10},1=>{B=>7}}
?当我构建散列时,我将为每个答案建立索引?我不知道保持哈希顺序是ruby的事情。