Ruby构建数组



Argh。在试图找出如何用Ruby构建数组时遇到了麻烦。

因此,我正在循环一个结果,我想添加类别字段作为关键字,并将其包含在内,这样,如果下一行具有相同的类别,它就会被放入该类别中。如果没有,它会生成一个新数组并将其添加到该数组中。

这是我迄今为止所拥有的。

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

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

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

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

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

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

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

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

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

data = results.each_with_object({}) do |row, memo|
  memo[row.category] ||= []  # create array unless it exists
  memo[row.category] << row.field
end

与PHP不同,不能使用任何对象作为Array的索引。在Ruby中,我们使用Hashes将任意对象与其他对象相关联。

如果您将代码更改为:,您的代码应该可以工作

data = Hash.new { |hash, key| hash[key] = [] }
results.each do |row|
   data[row.category] << row.field
end

相关内容

  • 没有找到相关文章

最新更新