舉例來說,如果我有一個這樣的數組:如何在Ruby中用分隔符分割數組?
[:open, 1, :open, 2, 3, :close, 4, :close, :open, 5, :close]
我想這一點:
[[1, [2, 3], 4], [5]]
的:open
有效地成爲[
和:close
成爲]
舉例來說,如果我有一個這樣的數組:如何在Ruby中用分隔符分割數組?
[:open, 1, :open, 2, 3, :close, 4, :close, :open, 5, :close]
我想這一點:
[[1, [2, 3], 4], [5]]
的:open
有效地成爲[
和:close
成爲]
你可以可能是用堆棧做到這一點,但遞歸設計很容易:
#!/usr/bin/env ruby
x = [:open, 1, :open, 2, 3, :close, 4, :close, :open, 5, :close]
def parse(list)
result = []
while list.any?
case (item = list.shift)
when :open
result.push(parse(list))
when :close
return result
else
result.push(item)
end
end
return result
end
puts parse(x).inspect
請注意,這將破壞您的原始數組。如果你想保存它,你應該在clone
之前通過它。
ar = [:open, 1, :open, 2, 3, :close, 4, :close, :open, 5, :close]
p eval(ar.inspect.gsub!(':open,', '[').gsub!(', :close', ']'))
#=> [[1, [2, 3], 4], [5]]
同樣以steenslag,但乾淨了一點
a = [:open, 1, :open, 2, 3, :close, 4, :close, :open, 5, :close]
eval(a.to_s.gsub(':open,','[').gsub(', :close',']'))
#=> [[1, [2, 3], 4], [5]]
你試過到目前爲止什麼碼? – GetSet 2012-03-16 13:47:04