如何根据特殊的起始字符将字符串数组拆分为子数组?

时间:2013-09-20 16:18:59

标签: python ruby

你可以将这段代码从Python简化为Ruby吗?可以说我有这个数据

data = ['hello', 'person', ';hello', 'otherperson']
print([x.split("@") for x in "@".join(data).split(";")])

当我打印它时会打印出来:

[['hello', 'person', ''], ['hello', 'otherperson']]

Ruby中有这样的东西吗?如果它可以在一行中完成,我宁愿这样做,但我只是知道它是怎么回事。

2 个答案:

答案 0 :(得分:1)

字面翻译,

data.join(?@).split(?;).map { |x| x.split(?@) }

但你可能完全想要一种不同的方法。如果任何字符串包含@,那么这将是错误的。

答案 1 :(得分:1)

这适用于预期输出,但请注意它会修改原始字符串,因此理想情况下data是一个深度克隆(或者不是改变包含字符串的问题):

data.slice_before { |s| s.gsub!(/^;/,'') }.to_a
 => [["hello", "person"], ["hello", "otherperson"]]