Ruby on rails 如何在ruby中使用with_索引映射数组?

Ruby on rails 如何在ruby中使用with_索引映射数组?,ruby-on-rails,arrays,ruby,mapping,Ruby On Rails,Arrays,Ruby,Mapping,我有以下用于映射n-D数组的代码。如果输入是[[C,“O”],[C,“O”],[C,“#”],[C],则输出是“COCOC#C”。我希望输出为C(O)COC#C这是第一个数组中有两个元素时的结果,第二个元素应该放在括号中。我使用了以下代码,但无法实现with_index函数的使用 def format2smi # return a Smiles compliant chemical name as a string map do |element| format_step(el

我有以下用于映射n-D数组的代码。如果输入是
[[C,“O”],[C,“O”],[C,“#”],[C]
,则输出是
“COCOC#C”
。我希望输出为
C(O)COC#C
这是第一个数组中有两个元素时的结果,第二个元素应该放在括号中。我使用了以下代码,但无法实现with_index函数的使用

def format2smi
  # return a Smiles compliant chemical name as a string

  map do |element|
    format_step(element)
  end.join('')    #.join(')')

end # format2smi

protected

def format_step(e)
  e.map.with_index do |x,i|

    if x.is_a?(Array)
x=“(“+x[1]+”)


如果仅在第一个元素上需要括号,只需执行以下操作即可:

array = [['C', 'O'], ['C', 'O'], ['C', '#'], ['C']]

array.first[1] = "(#{array.first[1]})" if array.first.size == 2
array.join # => "C(O)COC#C"

我已经解决了这个问题。我真蠢。:/

 def format_step(e)
  e.map.with_index do |x,i|

    if x.is_a?(Array)
      "(#{ format_step(x) })" # calling the same function
    else  
      if i ==0
        x.to_s
      else
       "("+x.to_s+")"
      end
      # convert to string and return
    end
  end.join('')
end

我不确定您是否需要根据您的问题和您共享的代码将
与_index
一起使用。如果您使用_index删除了对
的调用(并且还从声明的迭代变量中删除了命名索引
i
),则代码的功能将相同,因为您没有在代码中使用索引
i
。如果我遗漏了什么,请你澄清一下你的问题好吗?@DRSE非常感谢,我已经解决了这个问题,并发布了答案。谢谢:)@sawa,这是丹尼斯·里奇在20世纪70年代早期开发的一种计算机语言。它被认为是挽救了无数FORTRAN程序员免于发疯的功劳。
 def format_step(e)
  e.map.with_index do |x,i|

    if x.is_a?(Array)
      "(#{ format_step(x) })" # calling the same function
    else  
      if i ==0
        x.to_s
      else
       "("+x.to_s+")"
      end
      # convert to string and return
    end
  end.join('')
end