如何将此数组转换为哈希

时间:2019-05-02 13:16:57

标签: ruby

我有一个像这样的数组

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div class="container">

  <div class="page-header clearfix
  ">
    <h2>Header</h2>

    <div class="btn-group <!-- pull-right -->">
      <a class="btn btn-success" href="/Scope/New">Create</a>
      <div class="btn-group">
        <button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown">
                <span class="caret"></span>
            </button>
        <ul class="dropdown-menu pre-scrollable" role="menu">
          <li class="dropdown-header">Create as copy: </li>
          <li><a href="/Scope/New/1">Test 1</a></li>
          <li><a href="/Scope/New/2">Test 45</a></li>
          <li><a href="/Scope/New/3">Lorem ipsum</a></li>
        </ul>
      </div>
    </div>
  </div>
</div>

电子邮件数量有所不同。并且还可能在其中输入了某些内容,例如['project','AAA','Division','BBB','TestingType','CCC','Email','abc@gmail.com','def'@gmail.com','efg@gmail.com',...] ,现在您可能已经注意到,输入了Time和2323,所以结果哈希也必须由'Time'=>'2323'组成。但是无论如何,电子邮件将在结尾。

我想将此数组转换为这样的哈希值

'project','AAA','Time','2323','Division','BBB','TestingType','CCC'

对我来说,这里的困难在于,电子邮件计数每次都不同。有人可以如上所述将这个数组转换为所需的哈希吗?

3 个答案:

答案 0 :(得分:5)

似乎您正在寻找类似的东西:

attributes, emails = *array.slice_before('Email')
Hash[*attributes].update(emails.first => emails[1..-1])
#=> {"project"=>"AAA", "Division"=>"BBB", "TestingType"=>"CCC", 
#    "Email"=>["abc@gmail.com", "def@gmail.com", "efg@gmail.com"]}

答案 1 :(得分:1)

还有其他选择:

ary[ary.index('Email')..].partition{ |e| e == 'Email'}
.then { |k, v| ary[0..ary.index('Email')-1].each_slice(2).to_a << [k.first, v] }.to_h

#=> {"project"=>"AAA", "Division"=>"BBB", "TestingType"=>"CCC", "Email"=>["abc@gmail.com", "def@gmail.com", "efg@gmail.com"]}

答案 2 :(得分:1)

customers