我有一个十六进制字符数组,> 8000个字符,我需要对数组中的每6个字符进行一些操作。
红宝石中的范围有一个非常酷的步骤:
(1..100).step(6) do //etc....
对于数组是否有类似的功能?
类似的东西:
string.split("").step(6) do //etc...
答案 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
前加前缀来简单地将其转换为整数数组。
*