0

私はそのようなハッシュを持っています...

  scores = {:b3=>1000, :c3=>-1000}

  scores.each do |k,v|
    if v = 1000
      best_answer = k
    elsif v = -1000
      best_answer = k
    end
  end
  p 'BEST_ANSWER'
  p best_answer
  return best_answer

私はc3を取得し続けます

best_answerはb3である必要があります

私は何が間違っているのですか?

4

2 に答える 2

1

まず、割り当てから比較に変更する必要があります。

ではなくif v =むしろif v ==

第二に、「最良の答え」に到達したら、best_answer を返し、残りの反復を放棄することができます。

于 2012-12-01T00:09:02.520 に答える
0

あなたは実際に等号の代わりに代入演算子を使用しています。

=に変更==:

if v == 1000
  best_answer = k; break
elsif v == -1000
  best_answer = k; break
end

また、コードをリファクタリングしたいと考えています。

best_answer = scores.key(-1000)

また

best_answer = scores.min.first
p best_answer
#=> :b3
于 2012-12-01T00:03:42.157 に答える