Ruby on rails 在ruby 2-d数组中获取唯一值及其计数

Ruby on rails 在ruby 2-d数组中获取唯一值及其计数,ruby-on-rails,ruby,arrays,multidimensional-array,Ruby On Rails,Ruby,Arrays,Multidimensional Array,我有一个Ruby 2D数组,其中每个数组都有一行来自SQL查询,其列位于子数组中 @mastertest = connection.execute("select code_ver from mastertest") 其中可能包含以下内容: @mastertest = [{"abc"} , {"abc"}, {"pqr"}, {"xyz"}, {"pqr"}, {"pqr"}] @result = [{"abc", 2} , {"xyz", 1} , {"pqr", 3}] 现在,我想形成

我有一个Ruby 2D数组,其中每个数组都有一行来自SQL查询,其列位于子数组中

@mastertest = connection.execute("select code_ver from mastertest")
其中可能包含以下内容:

@mastertest = [{"abc"} , {"abc"}, {"pqr"}, {"xyz"}, {"pqr"}, {"pqr"}]
@result = [{"abc", 2} , {"xyz", 1} , {"pqr", 3}]
现在,我想形成另一个2D数组,它只会给出具有唯一code\u ver值及其计数的行

大概是这样的:

@mastertest = [{"abc"} , {"abc"}, {"pqr"}, {"xyz"}, {"pqr"}, {"pqr"}]
@result = [{"abc", 2} , {"xyz", 1} , {"pqr", 3}]

正如Sawa所说,您的数据不是有效的Ruby对象。我想你的意思是:

@mastertest = ["abc" , "abc", "pqr", "xyz", "pqr", "pqr"]
@result = @mastertest.inject({}) do |a, e|
  a[e] ||= 0
  a[e] += 1
  a
end.to_a
#=> [["xyz", 1], ["abc", 2], ["pqr", 3]]
我认为每个_和_对象都是更好的方式:

["abc" , "abc", "pqr", "xyz", "pqr", "pqr"].each_with_object({}) do |e, o|
  o[e] ||= 0
  o[e] += 1
end.to_a
#=> [["xyz", 1], ["abc", 2], ["pqr", 3]]

这些都不是有效的Ruby对象。这个问题相当令人困惑。。。请你解释清楚好吗?非常感谢!!完美的工作方式为什么每个_和_对象都是更好的方式?它更自然,更不容易出错,代码更少。你是在告诉我,由于某些原因,你甚至不使用它会更好,因为你在循环结束时返回数组,而你不需要使用它?很抱歉,我犯了这个错误,我已经更新了它。谢谢你的建议。顺便说一下,这个方法是1.9.1和更高版本。代码在Ruby 1.8.7/Rails 2.3.11中运行良好;