是否可以"总和"当它们是字符串模式时,各种各样的枚举? 每个例子都这样? (嗯,我知道这不起作用。)
(( 'a'..'z') + ('A'..'Z')).to_a
请注意: 我问的是从a到z以及从A到Z一起获取字符串字符数组。 关于字符串模式我的意思是字符会显示为[" a"," b",.....," Y"," Z& #34;]
答案 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')