我有一个很长的数字串(1000个字符)。我想把它分解成5个一组,然后插入到一个数组arr
中。
str = "7316717653133062491922511967442657474206326239578318016 ..."
我尝试each_slice
,但当我尝试require 'enumerator'
#=〉*irb说:错误 *
str.each_slice(5).to_a
我希望输出如下所示:
arr = [ "73167", "17653", "33062", ... ]
如何才能做到这一点?
5条答案
按热度按时间unftdfkk1#
问题是你试图在一个非枚举对象(字符串)上执行一个枚举方法,你可以尝试在字符串上使用
scan
来查找5个元素的组:如果你想走可枚举的路线,你可以先把字符串分解成一个字符数组,得到5个一组的数组,然后把它们重新组合成5个字符的字符串:
hvvq6cgz2#
不知道你为什么需要枚举,它在ruby core中,不需要被要求。
57hvy0tb3#
我会使用regexp。我认为- * 无需进行任何测试 * -这是一个更快的解决方案:
下面是一些代码:
注意:我在我的例子中使用4个字符,而不是5个。但是你明白我的意思了。
u3r8eeie4#
我会小心使用
.chars
,因为它必须为字符串分配一个单独的数组。一般来说,我建议使用块(如果有的话)或索引,因为它会运行得更快,内存效率更高。在过去,我使用过拆分器处理块,比如:kxxlusnw5#
我个人遵循了user8556428的思想,以避免大多数建议引入的昂贵的中间值,并避免修改输入字符串,我希望能够将其用作生成器(例如使用
s.each_slice.with_index
)。我的用例实际上是关于字节的,而不是字符,在字符大小的情况下,strscan是一个很好的解决方案。