-1

啊。在这里尝试弄清楚如何在 Ruby 中构建我的数组时遇到了麻烦。

所以我正在循环一个结果,我想将类别字段添加为键并拥有它,这样如果下一行具有相同的类别,它就会被放入该类别。如果没有,它会创建一个新数组并将其添加到其中。

这是我到目前为止所拥有的。

data = Array.new
results.each do |row|
   data[row.category].push row.field
end

我知道这是行不通的。我希望最终成为(在循环之后)一个包含所有'sdata[row.category]的数组row.field

所以我最终得到了一个看起来像这样的数组。

[['Dogs', 5, 12, 2], ['Cats', 4, 5, 9], ['Fish', 25, 82, 23]]

所以不管我做了多少循环,如果我把它推到一个已经存在于数据中的数组中,那么它只会追加它,如果数组不存在,它会创建它然后追加它。

在 PHP 中,我会简单地这样做:

$data[$row['category']][] = $row['field']

用空的 [] 表示如果没有则创建一个新数组。我如何在 Ruby 中做到这一点???

4

2 回答 2

2

是的,您似乎对 PHP 及其关联数组(在任何其他语言中都不称为数组 :))感到困惑。你需要一个哈希。试试这个片段:

data = results.each_with_object({}) do |row, memo|
  memo[row.category] ||= []  # create array unless it exists
  memo[row.category] << row.field
end
于 2013-01-16T05:57:57.347 回答
0

与 PHP 不同,您不能使用任何对象作为Array. 在 Ruby 中,我们使用Hashes 将任意对象与其他对象关联起来。

如果您将代码更改为:

data = Hash.new { |hash, key| hash[key] = [] }

results.each do |row|
   data[row.category] << row.field
end
于 2013-01-16T05:55:49.620 回答