0

我有一个 Ruby 2D 数组,其中每个数组都有来自 SQL 查询的一行及其在子数组中的列。

@mastertest = connection.execute("select code_ver from mastertest")

其中可能包含以下内容:

@mastertest = [{"abc"} , {"abc"}, {"pqr"}, {"xyz"}, {"pqr"}, {"pqr"}]

现在,我想形成另一个二维数组,它只给我具有唯一值的行code_ver及其计数。

像这样的东西:

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

3 回答 3

3
@result = @mastertest.inject(Hash.new(0)) { |hash,element|
  hash[element] +=1
  hash
}
于 2012-10-17T00:18:09.697 回答
3

我认为each_with_object更好的方法:

["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]]
于 2012-10-17T00:49:39.007 回答
2

正如 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]]
于 2012-10-17T00:12:39.460 回答