Arrays 在ruby中拆分和重构数组
我有一个数组,像这样:Arrays 在ruby中拆分和重构数组,arrays,ruby,sorting,Arrays,Ruby,Sorting,我有一个数组,像这样:['host1','3','1','12','host2','4','1','5','1','host3','35','1',…]等等 问题是-如何在下一步中重新构造此阵列: ['host1',['3','1','12','host2',[…]] 或者像杂烩 {'host1'=>['3'、'1'、'12']、'host2'=>[…]} 谢谢假设您的密钥以非数字开头(编辑:但您应该明确说明,正如@tadman所问): 编辑:正如@Stefan所说,这是更短的: result_
['host1','3','1','12','host2','4','1','5','1','host3','35','1',…]等等
问题是-如何在下一步中重新构造此阵列:
['host1',['3','1','12','host2',[…]]
或者像杂烩
{'host1'=>['3'、'1'、'12']、'host2'=>[…]}
谢谢假设您的密钥以非数字开头(编辑:但您应该明确说明,正如@tadman所问):
编辑:正如@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"]]
这里有一种可能的方法来构建您的第一个期望输出:
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"]]
如果需要,您可以使用散列[*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"]}
之后
a #=> [["host1", ["3"]]
其余的计算结果类似。第一个问题:您尝试了什么?什么定义了这里的分离?为什么要匆忙选择答案?其他人(不是我)可能还在努力寻找答案。很高兴认识你,老兵!他们正在寻找即时答案,实施、质量等对他们来说并不重要。你知道,@CarySwoveland,他们只是想要性,为爱而努力不是他们的交易-)相当于你散列的数组是['host1',['3','1','12']],['host2',[…]]
不需要块,只要在(/^\D/)之前切片就可以了
a.last.last << "3"
#=> ["host1", []].last << "3"
#=> [] << "3"
a #=> [["host1", ["3"]]