0

Ruby 2D 配列があります。各配列には、SQL クエリからの行と、サブ配列内の列があります。

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

次のようなものが含まれている可能性があります。

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

今、私は別の 2D 配列を形成したいと思います。これは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 に答える