【问题标题】:Getting unique values and their count in a ruby 2-d array [closed]在红宝石二维数组中获取唯一值及其计数[关闭]
【发布时间】:2012-10-16 23:48:50
【问题描述】:

我有一个 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}]

【问题讨论】:

  • 那些不是有效的 Ruby 对象。
  • 这个问题比较混乱...你能解释得更好吗?

标签: ruby-on-rails ruby arrays multidimensional-array


【解决方案1】:
@result = @mastertest.inject(Hash.new(0)) { |hash,element|
  hash[element] +=1
  hash
}

【讨论】:

  • 非常感谢!!工作得很好
【解决方案2】:

我认为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]]

【讨论】:

【解决方案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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多