【问题标题】:Refactoring an each loop重构每个循环
【发布时间】:2015-05-11 10:52:23
【问题描述】:

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

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

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 是一个哈希数组。

【问题讨论】:

  • 你可能想要.inject
  • 你的外循环怎么没有使用a
  • 什么是something
  • something 只代表一个条件,要么是真要么是假。
  • 你的意思是...if something == true(和...if something一样)?另外,您的预期或期望输出是什么?

标签: ruby arrays each


【解决方案1】:

我无法从该代码中确切知道您在做什么 - group 是什么?条件如何将some_arrayother_array 联系在一起?但总的来说,如果你想构建一个新的数组或哈希,可以使用inject(又名reduce)。模式是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2015-03-28
    • 2015-10-06
    • 2011-11-05
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多