如何在数组中添加多个数据,遵循.each方法

时间:2010-07-22 19:03:36

标签: ruby arrays iterator each

我有以下方法:

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"],提前谢谢。

3 个答案:

答案 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)