簡體   English   中英

我的&&運算符有什么問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM