我有一個數組,如下所示:['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