这是输入字符串:1,1,1,1,1,1,1,1,1,1,-9\n1,1,1,1,1,1,1,1,1,1,1\n2,1,2,1,2,1,2,1,2,1,2\n1,0,1,0,1,0\n3,1,2,-2,1,-2
我需要将此字符串转换为整数列表,因此输出应为:[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -9], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2], [1, 0, 1, 0, 1, 0], [3, 1, 2, -2, 1, -2]]
我的解决方法是:
text.split("\n").map do |row|
row.split(",").map(&:to_i)
end
有没有更好,更有效的方法?
答案 0 :(得分:0)
我经常发现,当人们说“更高效”或“更优雅”时,它们的意思只是更短或更紧凑。您的代码没有任何问题,除非您要对成千上万个数组执行操作我怀疑效率不是过早的优化。也就是说,如果需要,您可以为此编写单行代码。
例如,使用Ruby 2.7.1和 str 作为输入字符串:
str.split.map { _1.split(?,).map &:to_i }
#=> [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -9], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2], [1, 0, 1, 0, 1, 0], [3, 1, 2, -2, 1, -2]]
如果使用Kernel#pp打印漂亮的结果,您将获得预期的结果。
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -9], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2], [1, 0, 1, 0, 1, 0], [3, 1, 2, -2, 1, -2]]
在任何有意义的方式上,这都不比您现有的代码更好,而且我什至都不认为它会更快。我真正能说的是它更紧凑并且使用了更少的行,因此请您对它的可读性和实用价值做出自己的判断。