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 回答