将字符串转换为整数列表

时间:2020-07-15 22:19:02

标签: ruby

这是输入字符串: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

有没有更好,更有效的方法?

1 个答案:

答案 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]]

在任何有意义的方式上,这都不比您现有的代码更好,而且我什至都不认为它会更快。我真正能说的是它更紧凑并且使用了更少的行,因此请您对它的可读性和实用价值做出自己的判断。

相关问题