unj*_*nj2 1 ruby iteration binary decimal
我正在学习Ruby,并考虑制作二进制 - >十进制转换器.它获取二进制字符串并转换为十进制等效值.有没有办法跟踪ruby中的当前迭代步骤,以便可以删除变量'x'?
def convert(binary_string)
decimal_equivalent = 0
x=0
binary_string.reverse.each_char do |binary|
decimal_equivalent += binary.to_i * (2 ** x)
x+=1
end
return decimal_equivalent
end
Run Code Online (Sandbox Code Playgroud)
是的,通过使用非常强大的枚举器库:
require 'enumerator'
def convert(binary_string)
decimal_equivalent = 0
binary_string.reverse.enum_for(:each_char).each_with_index do |binary, i|
decimal_equivalent += binary.to_i * (2 ** i)
end
return decimal_equivalent
end
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可能感兴趣Array#pack
,并且String#unpack
.他们支持位串.此外,获得此结果的更简单方法是使用#to_i
,例如"101".to_i(2) #=> 5