我正在編寫一個程序,其中一個問題是我需要對某些整數中的位模式進行一些分析。在整數中循環遍歷,ruby
正因爲如此,我想能夠做這樣的事情的:
#Does **NOT** work:
num.each_bit do |i|
#do something with i
end
我能夠做出一些作品,這樣做:
num.to_s(2).each_char do |c|
#do something with c as a char
end
然而,這並不具有性能我想。
我發現,你可以這樣做:
0.upto(num/2) do |i|
#do something with n[i]
end
這具有比each_char
方法
這個循環會更加糟糕表現被執行數百萬次,或者更多,所以我會喜歡它儘可能快。
以供參考,在這裏是函數的整體
@@aHashMap = Hash.new(-1)
#The method finds the length of the longes continuous chain of ones, minus one
#(101110 = 2, 11 = 1, 101010101 = 0, 10111110 = 4)
def afunc(n)
if @@aHashMap[n] != -1
return @@aHashMap[n]
end
num = 0
tempnum = 0
prev = false
(n.to_s(2)).each_char do |i|
if i
if prev
tempnum += 1
if tempnum > num
num = tempnum
end
else
prev = true
end
else
prev = false
tempnum = 0
end
end
@@aHashMap[n] = num
return num
end
如果你要性能,建立一個查找表很可能是正確的優化在這種情況下 –
聲明的''@@型變量是極不尋常的。你有這樣做的好理由嗎? – tadman
@tadman不,我沒有很好的理由。這只是當我製作一些靜態可變參數時卡住的東西,我還沒有費心去做任何重構。 – Automatico