重构每个循环

时间:2015-03-10 04:41:02

标签: ruby arrays each

更新:我设法重构了一点代码,但它仍然是一个嵌套循环。

我想我已经想出了一种使用mapkeep_if来改进代码的方法。我不知道它是理想的,因为它仍然是一个嵌套循环。     output = {}

array.map do |a|
  output[a[0]] = another_array.dup.keep_if do |b|
    a[1].include?(b["name"])
  end
end

这是一个n00b问题。我试图找出如何重构嵌套的每个循环,如下所示,这样我就不会声明我以后不需要的额外变量,以便我的代码运行得更快。

some_array = [["one", 2, 3], ["two", 3, 4], ["three", 4, 5]]
output = {}

some_array.each do |a|
  current_group = []

  another_array.each do |b|
    current_group << b if something == true
  end

  output[a[0]] = current_group
end

output作为数组的哈希返回。 some_array是一个嵌套数组,其中每个子数组中的第一个元素是一个字符串,another_array是一个哈希数组。

1 个答案:

答案 0 :(得分:0)

我无法准确地告诉您从该代码中做了什么 - group是什么?条件如何将some_arrayother_array联系在一起?但一般来说,如果你想建立一个新的数组或哈希,那么要达到的习语就是inject(a.k.a。reduce)。模式是:

output = some_array.inject({}) do |partial_output, item| 
   ...
   new value of partial_output after this loop iteration
end