- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
当我多年前开始编写 Ruby 时,我花了一段时间才理解 each 之间的区别。和 map .当我发现所有其他的时,情况只会变得更糟 Enumerable和 Array方法。
借助官方文档和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/
我想用 index 做 a.each_with_object,比这更好: a = %w[a b c] a.each.with_index.each_with_object({}) { |arr, ha
我正在尝试弄清楚应该如何使用 each_with_object。 我有一个不起作用的求和示例: > (1..3).each_with_object(0) {|i,sum| sum+=i} => 0 我
下面,我们得到一个名为 win_lose 的数组。我们应该创建一个看起来像下面的哈希的哈希。我最初的想法是使用 .count 做一些事情,但在尝试了答案之后,.each_with_object 的效果
根据 APIdock ,Ruby 方法 Enumerable#each_with_object 已弃用。 除非它是错误的(说“在最新稳定版本的 Rails 上弃用”让我怀疑可能是 Rails 的猴子补
这个问题在这里已经有了答案: Strange, unexpected behavior (disappearing/changing values) when using Hash default
我知道 each_with_object 不适用于像 integer 这样的不可变对象(immutable对象)。 例如 (1..3).each_with_object(0) {|i,sum| sum
我想在散列上使用 each_with_object 但不知道应该如何使用它。这是我所拥有的: hash = {key1: :value1, key2: :value2} hash.each_with_
我不得不更新一个数组,我使用了 +=和 <<在传递给 Array#each_with_object 的 block 内的不同代码运行中: 代码1 (1..5).each_with_object([])
为什么在 each_with_object 中使用 0 作为参数没有返回正确的值: [1,2,3].each_with_object(0) {|i,o| o += i } # => 0 但是使用空数组
我对以下 Ruby 行为感到困惑: result = [1,2,3].each_with_object([]) do |elem, memo| memo [[1], [2], [3]] 上面的代
文档说: enum#each_with_object :- Iterates the given block for each element with an arbitrary object, ob
我做了一些基准测试: require 'benchmark' words = File.open('/usr/share/dict/words', 'r') do |file| file.each
#each_with_object和 #inject都可以用来构建哈希。 例如: matrix = [['foo', 'bar'], ['cat', 'dog']] some_hash = matri
当我多年前开始编写 Ruby 时,我花了一段时间才理解 each 之间的区别。和 map .当我发现所有其他的时,情况只会变得更糟 Enumerable和 Array方法。 借助官方文档和many S
我们正在从 Ruby 1.9.3 升级到 Ruby 2,从 Rails 3.x 升级到 Rails4。我们正在使用设计进行身份验证。我们基于 Ryan Bates Railscasts 升级了 gem
我是一名优秀的程序员,十分优秀!