如何从嵌套哈希

时间:2016-10-03 16:14:38

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试创建一个应用程序,用户可以使用化学元素转换他的名字或单词(比如打破坏标识)。经过这里的几个问题,尝试和长时间的反思,我有点找到了#34;理想的"解决方案...... (我希望......)

我希望如果我输入 acalam 来显示以下内容:

symbols

如果没有符号匹配,我会保留初始条目,因此可能是: 你好=> ll O (粗体字符代表现有的化学符号)

我的模型看起来像这样(现在只是几个符号)

class Convertor < ActiveRecord::Base

  def get_chemical
    symbols = {
        "ac" => {
          :chem_name => "Actinium",
          :number => 89,
          :symbol => "Ac",
          :molar => 227
          },
        "al" => {
          :chem_name => "Aluminium",
          :number => 13,
          :symbol => "Al",
          :molar => 26.981539
          },
        "am" => {
         :chem_name => "Americium",
         :number => 95,
         :symbol => "Am",
         :molar => 243
            }
          }

      #not sure how to use this
      result=[]
      symbols.each do |key, value|
        value.each do |key2, value2|
          result << value2
        end
        result
      end


      name.downcase.gsub!(Regexp.union(symbols.keys), symbols) 

  end

end

这个视图

  .col-xs-12
    .number
      = @convertor.get_chemical # plus something? 
    .symbol
      = @convertor.get_chemical # plus something?
    .molar
      = @convertor.get_chemical # plus something?
    .chem_name
      = @convertor.get_chemical # plus something? 

现在我的观点如下:(enter image description here

修改

这些都是化学符号,所以我必须为每个符号制作一个条件吗?或者有更好的方法吗?enter image description here

1 个答案:

答案 0 :(得分:1)

符号长一两个字符?您必须先决定要先搜索哪两个:让我们说2个字符,然后是1.

对于&#34;你好&#34;

在哈希中搜索下一个不匹配的对:他,因为是哈希,你不必循环,只需询问symbols.include? 'He'是否转移到下一个不匹配的对。如果没有,请搜索&#39; H&#39;单独重复。

第一个&#39; l&#39;来了,它不匹配,&#39; ll&#39;也不匹配,只需返回&#39; l,与第二个&#39;相同。你最终得到了

l l O

当哈希包含你想要的符号时,只需返回它:

lookup = 'He'
symbols[lookup]
symbols[lookup][:chem_name]