举例来说,如果我有一个这样的数组:如何在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