我有以下方法:
def speciate
chem_formula.each { |chemical|
@chem_species = chemical.scan(/[A-Z][^A-Z]*/)
puts @chem_species
}
end
产生:
H2
S
O4
@chem_species = ["S", "O4"]
来自:@chem_formula = ["H2" "SO4"]
如何将数组设置为包含所有迭代?这就是如何输出["H2", "S", "O4"]
而不是["S", "O4"]
,提前谢谢。
答案 0 :(得分:1)
不是最优雅的,因为你正在构建一个数组,然后展平,但这有效:
@chem_formula.map{|chem| chem.scan(/[A-Z][^A-Z]*/) }.flatten
答案 1 :(得分:0)
def speciate
@chem_species = []
chem_formula.each { |chemical|
@chem_species.concat(chemical.scan(/[A-Z][^A-Z]*/))
puts @chem_species
}
end
答案 2 :(得分:0)
优雅的方式是:
@chem_formula.flat_map{|chem| chem.scan(/[A-Z][^A-Z]*/) }
注意:flat_map
是Ruby 1.9.2+。如果使用较旧的Ruby,您可以require 'backports/1.9.2/enumerable/flat_map'
,或者使用map{}.flatten(1)
。