Ruby 如何提升多个枚举数,或;那汽水呢?”;

Ruby 如何提升多个枚举数,或;那汽水呢?”;,ruby,enumerator,Ruby,Enumerator,这是一个相当非正统的经典方式,但它只是为了说明问题(嘿,如果你想让Buzz达到10亿,它可能会很快) fizzer=(Array.new(2),“Buzz”,7=>“Boozz”}?创建一个fizzer、蜂鸣器和boozzer的数组。然后在循环中对该数组中的每个fooer调用next,然后将结果与inject相加: # The sort is needed so it prints fizzbuzz, not buzzfizz # (hashes being unordered and all)

这是一个相当非正统的经典方式,但它只是为了说明问题(嘿,如果你想让Buzz达到10亿,它可能会很快)


fizzer=(Array.new(2),“Buzz”,7=>“Boozz”}?

创建一个fizzer、蜂鸣器和boozzer的数组。然后在循环中对该数组中的每个fooer调用
next
,然后将结果与
inject
相加:

# The sort is needed so it prints fizzbuzz, not buzzfizz
# (hashes being unordered and all)
fooers = the_hash.sort_by {|k,v| k}.map do |k,v|
  ( Array.new(k - 1, '') << v ).cycle
end

(1..100).each do |number|
  fizzbuzz = fooers.map(&:next).inject(:+)
  puts ( fizzbuzz.empty? ? number : fizzbuzz )
end
#需要进行排序,以便打印的是fizzbuzz,而不是buzzfizz
#(散列为无序和全部)
foores=the_hash.sort_by{k,v|k}.map do|k,v|

(数组。新的(k-1,,)啊..map.inject,我想不出来。边线,为什么#map需要一个符号and而#inject不需要符号?@steenslag:
inject
是专门编写的,所以它可以接受一个块或一个符号参数。
map
但是只能接受一个块,所以您需要
&
将符号转换为块(通过
Symbol#to_proc
)。为什么
inject
被编写成可以接受一个符号而
map
不是,我不知道,但我怀疑这与
inject
以前被认为速度特别慢以及使用符号而不是块显著加快速度有关。
# The sort is needed so it prints fizzbuzz, not buzzfizz
# (hashes being unordered and all)
fooers = the_hash.sort_by {|k,v| k}.map do |k,v|
  ( Array.new(k - 1, '') << v ).cycle
end

(1..100).each do |number|
  fizzbuzz = fooers.map(&:next).inject(:+)
  puts ( fizzbuzz.empty? ? number : fizzbuzz )
end