Ruby 如何提升多个枚举数,或;那汽水呢?”;
这是一个相当非正统的经典方式,但它只是为了说明问题(嘿,如果你想让Buzz达到10亿,它可能会很快)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)
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