我有一个数组,如下所示:['host1', '3', '1', '12', 'host2', '4', '1', '5', '1', 'host3', '35', '1'...]
等等。在ruby中拆分和重构数组
的问题是 - 我怎么能在明年重组这个数组:
['host1', ['3','1','12'], 'host2', [...]]
或像散
{'host1' => ['3','1','12'], 'host2' => [...]}
感谢
我有一个数组,如下所示:['host1', '3', '1', '12', 'host2', '4', '1', '5', '1', 'host3', '35', '1'...]
等等。在ruby中拆分和重构数组
的问题是 - 我怎么能在明年重组这个数组:
['host1', ['3','1','12'], 'host2', [...]]
或像散
{'host1' => ['3','1','12'], 'host2' => [...]}
感谢
假设你的钥匙将与启动非数字(编辑:但你必须澄清,因为@tadman问):
array = ['host1', '3', '1', '12', 'host2', '4', '1', '5', '1', 'host3', '35', '1']
result_array = array
.slice_before { |e| !e.match(/^\d/) }
.flat_map { |e| [e.shift, e] }
# => ["host1", ["3", "1", "12"], "host2", ["4", "1", "5", "1"], "host3", ["35", "1"]]
result_hash = Hash[*result_array]
# => {"host1"=>["3", "1", "12"], "host2"=>["4", "1", "5", "1"], "host3"=>["35", "1"]}
编辑:由于@Stefan说,这是更短:
result_array = array.slice_before(/^\D/).flat_map { |e| [e.shift, e] }
# => ["host1", ["3", "1", "12"], "host2", ["4", "1", "5", "1"], "host3", ["35", "1"]]
不需要块,只需'slice_before(/^\ D /)' – Stefan
下面是构建第一个期望的输出一个可能的方法:
result = a.
chunk { |a| !!/^host/.match(a) }.
map { |bool, group| bool ? group.first : group }
#=> ["host1", ["3", "1", "12"], "host2", ["4", "1", "5", "1"], "host3", ["35", "1"]]
从那里,你可以使用Hash[*result]
获得如果你需要散列。
arr = ['host1', '3', '1', '12', 'host2', '4', '1', '5', '1', 'host3', '35', '1']
arr.each_with_object([]) { |s,a| s[0] =~ /\D/ ? a << [s, []] : a.last.last << s }.to_h
#=> {"host1"=>["3", "1", "12"], "host2"=>["4", "1", "5", "1"], "host3"=>["35", "1"]}
如果arr
一个元件不以数字开头(即,匹配/\D/
)我们追加正在建造,a
阵列,具有[s, []]
;否则,我们将s
附加到刚创建的空数组中:a.last.last << s
。
当ARR的第一个元素被传递到块,块变量s
被设置为等于"host1"
,则由于"host1"[0] =~ /\D/ #=> 0
(0
是truthy)时,最初为空数组a
变得[["host1", []]
。
接着,"3"
被传递到块(s #=> "3"
),并且由于"3"[0] =~ /\D/ #=> nil
,我们执行
a.last.last << "3"
#=> ["host1", []].last << "3"
#=> [] << "3"
之后
a #=> [["host1", ["3"]]
剩余计算是相似的。
第一个问题:**您尝试过什么?**这里定义了什么? – tadman
为什么急于选择答案?其他人(不是我)可能仍在努力解答他们的答案。 –
很高兴认识你,老将!他们正在寻找即时答案,实施,质量等对他们来说并不重要。 你知道,@CarySwoveland,他们只是想要性,努力工作的爱不是他们的交易 - )) – marmeladze