gpt4 book ai didi

arrays - Ruby : Choosing between each, 映射、注入(inject)、each_with_index 和 each_with_object

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:08 24 4
gpt4 key购买 nike

当我多年前开始编写 Ruby 时,我花了一段时间才理解 each 之间的区别。和 map .当我发现所有其他的时,情况只会变得更糟 EnumerableArray方法。

借助官方文档和many StackOverflow questions ,我慢慢开始明白那些方法做了什么。

不过,这是我花了更长时间才理解的内容:

  • 我为什么要使用一种或另一种方法?
  • 有任何指导方针吗?

我希望这个问题不会重复:我对“为什么?”更感兴趣。比“什么?”或“如何?”,我认为它可以帮助 Ruby 新手。

最佳答案

一个更tl;dr的答案:

How to choose between each, map, inject, each_with_index and each_with_object?

  • 当您想要“通用” 迭代并且不关心结果时,请使用#each。示例 - 你有数字,你想打印每个数字的绝对值:

    numbers.each { |number| puts number.abs }
  • 当您想要一个新列表时使用#map,其中每个元素都是通过转换原始元素以某种方式形成的。示例 - 你有数字,你想得到它们的正方形:

    numbers.map { |number| number ** 2 }
  • 如果您想以某种方式将整个列表缩减为一个值,请使用#inject。示例 - 你有数字,你想得到它们的总和:

    numbers.inject(&:+)
  • 在与 #each 相同的情况下使用 #each_with_index,除了您还需要每个元素的索引:

    numbers.each_with_index { |number, index| puts "Number #{number} is on #{index} position" }
  • #each_with_object 的使用更为有限。最常见的情况是,如果您需要类似于 #inject 的东西,但想要一个新集合(而不是奇异值),这不是原始集合的直接映射。示例 - 数字直方图(频率):

    numbers.each_with_object({}) { |number, histogram| histogram[number] = histogram[number].to_i.next }

关于arrays - Ruby : Choosing between each, 映射、注入(inject)、each_with_index 和 each_with_object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40469476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com