【问题标题】:Iterating an array of array to streamline the code (Ruby, Rails, active admin 1.0)迭代数组以简化代码(Ruby、Rails、active admin 1.0)
【发布时间】:2013-12-22 22:29:34
【问题描述】:

我有一个名为“数据”的数组数组,它​​是: (构建它以适应使用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 中,Goal 必须显示数组“日期”的第一部分:获取、品牌、资格。

数字必须在数组“数据”中显示相关数量,例如 3、2、1。

我想做两件事:

  • 通过使用 lop each 或 for 来简化/改进代码,这将使我能够生成 data_prepared_for_table 类似:

     data_prepared_for_table = [(0..5).each do |i|
                        {goal: data[i][0], number: data[i][1]},                        
                       ]
    

    但它不起作用并产生错误。我该怎么做?

  • 1234563到数据 [6] 甚至更多 [7] 等等...... 我其实不知道要等多久!

如果不指定i 的最后一个值,我该怎么做?也许在迭代中,指定i 必须递增直到data[i][0].exists?

【问题讨论】:

  • 你能显示预期的输出目标和数据指的是什么吗?
  • @bjhaid 刚刚添加了一些解释。这是非常基本的:我有一个带有goal_type 的数组,每个goal_type 都有一个数字。我需要使用名为“data”的数组中的信息来创建另一个名为 data_prepared_for_table 的数组。我设法做到了,但正如我所说,如果可能的话,我想通过循环/迭代来干燥/简化/减少代码。我还需要提供我不知道数组中值的数量的情况。

标签: ruby-on-rails ruby arrays ruby-on-rails-3 activeadmin


【解决方案1】:

您只需在混合中添加一点 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) ]

还有一堆额外的噪音。

【讨论】:

  • 确实我不需要中间数组。只是直接用.map!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
相关资源
最近更新 更多