我有一个像这样的数组
<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'
对我来说,这里的困难在于,电子邮件计数每次都不同。有人可以如上所述将这个数组转换为所需的哈希吗?
答案 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