[英]What is wrong with my && operator?
我想知道為什么當我輸入1982
時這會輸出false
。 我的&&
語句有問題嗎? 我嘗試使用!(t==r)
,但是沒有用; 由於某種原因,它會一直輸出false
。
def no_repeats?(year)
out=true
t=0
while t<4
r=0
while r<4
if (year[t] == year[r]) && t != r
out=false
end
r+=1
end
t+=1
end
out
end
您可能使它變得復雜了很多。
2.2.0-preview1 :001 > load 'no_repeat.rb'
=> true
字符串測試
2.2.0-preview1 :002 > no_repeats?("1981")
=> false
2.2.0-preview1 :003 > no_repeats?("1983")
=> true
測試為整數
2.2.0-preview1 :004 > no_repeats?(1981)
=> false
2.2.0-preview1 :005 > no_repeats?(1983)
=> true
和no_repeat.rb
看起來像
def no_repeats?(year)
digits = year.to_s.split(//)
digits.size == digits.uniq.size
end
編輯:基准
Using Original Post
real 0m0.598s
user 0m0.583s
sys 0m0.015s
Using .split(//)
real 0m1.322s
user 0m1.321s
sys 0m0.000s
Using .chars.to_a
real 0m0.562s
user 0m0.557s
sys 0m0.004s
因此,為了使這個問題更完整,我將基准測試包括在內,每個基准測試使用了40萬次。 通過使用split(//)
,您將獲得幾乎2倍的性能提升。 通過使用chars.to_a
,您將可以保持原來的速度。
def no_repeats?(year)
digits = year.to_s.chars.to_a
digits.size == digits.uniq.size
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.