如何"总结" Ruby中的枚举数

时间:2014-11-21 12:15:06

标签: ruby

是否可以"总和"当它们是字符串模式时,各种各样的枚举? 每个例子都这样? (嗯,我知道这不起作用。)

(( 'a'..'z') + ('A'..'Z')).to_a

请注意: 我问的是从a到z以及从A到Z一起获取字符串字符数组。 关于字符串模式我的意思是字符会显示为[" a"," b",.....," Y"," Z& #34;]

6 个答案:

答案 0 :(得分:9)

您可以使用splat运算符:

[*('A'..'Z'), *( 'a'..'z')]

答案 1 :(得分:4)

喜欢这个吗?

[('a'..'z'), ('A'..'Z')].map(&:to_a).flatten

还是这个?

('a'..'z').to_a + ('A'..'Z').to_a

答案 2 :(得分:2)

没有答案,但答案基准:

require 'benchmark'

n = 100000
Benchmark.bm do |x|
  x.report("flat_map   : ") { n.times do ; [('A'..'Z'), ('a'..'z')].flat_map(&:to_a) ; end }
  x.report("map.flatten: ") { n.times do ; [('A'..'Z'), ('a'..'z')].map(&:to_a).flatten ; end }
  x.report("splat      : ") { n.times do ; [*('A'..'Z'), *( 'a'..'z')] ; end }
  x.report("concat arr : ") { n.times do ; ('A'..'Z').to_a + ('a'..'z').to_a  ; end }
end

结果:

#=>       user     system      total        real
#=> flat_map   :   0.858000   0.000000   0.858000 (  0.883630)
#=> map.flatten:   1.170000   0.016000   1.186000 (  1.200421)
#=> splat      :   0.858000   0.000000   0.858000 (  0.857728)
#=> concat arr :   0.812000   0.000000   0.812000 (  0.822861)

答案 3 :(得分:0)

由于您希望 first Range中的元素位于输出Array end 最后 Range位于输出Array开头,但仍然在每个{{1> 中保持相同的顺序我会这样做(这也很好地推广到两个Range以上):

Enumerable

答案 4 :(得分:0)

['a'..'z'].concat(['A'..'Z'])

这可能是最快的方法。

答案 5 :(得分:0)

  

关于字符串模式我的意思是字符会显示为[" a"," b",.....," Y",&# 34; Z"]

回答上述问题:

Array('a'..'z').concat Array('A'..'Z')