我目前正在使用以下代码:
text = "a, 1; b, 2"
temp = []
text.gsub(/\s+/, "").split(";").each {|x| temp << x.split(",")}
temp # => [["a","1"],["b","2"]]
我想知道是否有一种灵活的方法可以在没有额外temp = []
行的情况下在一行中完成所有操作?如何将每个块执行的结果加入到数组中?
谢谢!
答案 0 :(得分:5)
任何Ruby新手都必须阅读Enumerable模块。请改用Enumerable#map:
text.gsub(/\s+/, "").split(";").map { |x| x.split(",") }
#=> [["a", "1"], ["b", "2"]]
看起来你不熟悉函数式编程原理,这里它可以帮助你link(具体来说:see this)。每次你写each
时都会想到是否有其他选择(可以像编写文件一样做副作用,但更新变量通常是个坏主意。)
答案 1 :(得分:1)
对于您提供的非常有限的语料库,您可以使用 #scan 将字符串解析为数组,然后将一系列切片转换为子数组。例如:
"a, 1; b, 2".scan(/\w+/).each_slice(2).to_a
=> [["a", "1"], ["b", "2"]]
这是否在更广泛的意义上有用取决于你。