逐步迭代一系列字符

时间:2012-02-03 19:04:40

标签: ruby

我有一个十六进制字符数组,> 8000个字符,我需要对数组中的每6个字符进行一些操作。

红宝石中的范围有一个非常酷的步骤:

(1..100).step(6) do //etc....

对于数组是否有类似的功能?

类似的东西:

string.split("").step(6) do //etc...

4 个答案:

答案 0 :(得分:4)

您想要Enumerable#each_slice

require 'enumerator' # if pre-Ruby1.9
string.split("").each_slice(6) do |ary|
  # ary is a 6-length array, and this is executed for every block of 6 characters
end

答案 1 :(得分:2)

您说您有一系列字符,但随后您使用string.split("")显示代码。

比使用split("")更高效 - 它会在开始之前创建一个包含8,000个字符串的中间数组,浪费时间和内存 - 使用String#chars枚举器和each_slice

string.chars.each_slice(6) do |a,b,c,d,e,f|
  # one variable for each character
end

string.chars.each_slice(6) do |a|
  # a is an array of all six
end

(另请注意each_cons(6),以防您真正的意思。)

答案 2 :(得分:1)

使用Array.each_slice(6)

%w[a b c d e f g h i j k l m n o p].each_slice(6) { |s| puts s.join(',') }
a,b,c,d,e,f
g,h,i,j,k,l
m,n,o,p

答案 3 :(得分:0)

您可以使用带有步骤的范围和Array的方法values_at。此方法采用一个或多个整数或范围作为索引参数。不幸的是,Range的{​​{1}}方法不返回范围,而是可枚举。但是,可以通过在星号step前加前缀来简单地将其转换为整数数组。

*