我有一个名为'data'的数组数组,它是:(构建它以调整使用sb's advice on Active Admin)
我需要使用它的数据来创建一个具有这种结构的哈希数组:
data_prepared_for_table = [{goal: data[0][0], number: data[0][1]},
{goal: data[1][0], number: data[1][1]},
{goal: data[2][0], number: data[2][1]},
{goal: data[3][0], number: data[3][1]},
{goal: data[4][0], number: data[4][1]},
{goal: data[5][0], number: data[5][1]}
]
在data_prepared_for_table中,目标必须显示数组'日期'的第一部分:获取,品牌,资格。
Number必须在数组'data'中显示相关数量,例如3,2,1。
我想做两件事:
data_prepared_for_table = [(0..5).each do |i|
{goal: data[i][0], number: data[i][1]},
]
但它不起作用并产生错误。我该怎么办?如果不指定i
的最后一个值,我怎么能这样做?也许在迭代中,指定i
必须递增直到data[i][0].exists?
?
你只需要在混合中抛出一点map
来将你的数组映射到你想要的格式:
array_of_hashes = array_of_arrays.map { |a| { :goal => a.first, :number => a.last.to_i } }
您可能会或可能不想要to_i
电话,但考虑到您的任务历史,它可能是有意义的。
您还可以将其与原始查询的位置结合使用:
array_of_hashes = Deal.connection.select_rows(...).map do |row|
{ :goal => row.first, :number => row.last.to_i }
end
避免中间数组(当然假设您不需要任何数组的数组)。
这个问题:
data_prepared_for_table = [(0..5).each do |i|
{goal: data[i][0], number: data[i][2]},
]
是你在each
区块内有一个迷路逗号,你正在看data[i][2]
而不是data[i][1]
,最重要的是,each
返回其接收器,所以你真的写这个:
data_prepared_for_table = [ (0..5) ]
带着一堆额外的噪音。