Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby构建数组_Ruby_Arrays_Multidimensional Array - Fatal编程技术网

Ruby构建数组

Ruby构建数组,ruby,arrays,multidimensional-array,Ruby,Arrays,Multidimensional Array,啊。在尝试如何用Ruby构建我的数组时遇到了麻烦 因此,我循环遍历一个结果,我想添加category字段作为键,这样,如果下一行具有相同的类别,它就会被放入该类别中。如果没有,它将创建一个新数组并将其添加到该数组中 这是我到目前为止所拥有的 data = Array.new results.each do |row| data[row.category].push row.field end 我知道这是行不通的。我希望数据[row.category]最终成为(在循环之后)包含所有row.

啊。在尝试如何用Ruby构建我的数组时遇到了麻烦

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

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

data = Array.new
results.each do |row|
   data[row.category].push row.field
end
我知道这是行不通的。我希望
数据[row.category]
最终成为(在循环之后)包含所有
row.field的数组

所以我最终得到了一个如下所示的数组

[['Dogs', 5, 12, 2], ['Cats', 4, 5, 9], ['Fish', 25, 82, 23]]
所以不管我做了多少次循环,如果我把它放入一个已经存在于数据中的数组中,它只会追加它,如果数组不存在,它会创建它,然后追加它

在PHP中,我只需执行以下操作:

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

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

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

如果将代码更改为:

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

results.each do |row|
   data[row.category] << row.field
end
data=Hash.new{| Hash,key | Hash[key]=[]}
结果。每个do |行|

data[row.category]是的,您似乎被PHP及其关联数组(在任何其他语言中都不称为数组:)弄糊涂了。你需要一份杂烩。请尝试以下代码段:

data = results.each_with_object({}) do |row, memo|
  memo[row.category] ||= []  # create array unless it exists
  memo[row.category] << row.field
end
data=results.each_with_object({})do|row,memo|
memo[row.category]| |=[]#创建数组,除非它存在

备注[row.category]不,这不包括新数组的创建。您是否测试了此版本的代码?我感觉它仍然不起作用。结果就是你想要循环的结果。可能是个物体。在我的例子中,这是一个DB查询的结果。您好,谢谢您的快速回复,但是结果是:
{“category”=>“Sales”,“field”=>5502.0}
我在代码示例中遇到了这个错误:
未定义的方法“category”,用于#
有什么想法吗?@SolidPink:yep,只需使用
行['category']
而不是
行.category
。宾果!谢谢你。那么,为什么是行而不是行呢?因为,与PHP不同,ruby在幕后不会做奇怪的胡言乱语。哈希是一种简单的结构。它没有
类别
方法。但是它确实有一个
[]
方法,可以通过它的键获取值。:)还有,快一点。如何启动具有特定长度的新哈希。例如,在上面的代码中,可能有一些
数据[row.category]
包含2个条目,一些包含3个条目。(或者不管怎样,重点是它不会是一个好的、整洁的散列)。我能把它垫起来吗?也许会说缺失值为零?