如何遍历ruby中的哈希并确定最终值

时间:2013-04-08 17:51:24

标签: ruby

我有一个像这样打印的变量:

{:type1=>:poor, :type2=>:avg, :type3=>:best}

我想迭代这个哈希并根据以下规则打印出最终值

  • 如果任何类型的值为:best,则最终值为best
  • 如果任何类型的值为:avg且没有best,则最终值为avg
  • 否则最终值为poor

基本上最强的胜利。

我试过以下

def final_value(values)
  val = "poor"
  values.each do |key, val|

  end
  val
end

4 个答案:

答案 0 :(得分:5)

使用哈希的has_value?方法

val = :poor;
val = :avg  if values.has_value?(:avg);
val = :best if values.has_value?(:best);
val

答案 1 :(得分:0)

有这样的事情吗?

final_val = :poor
values.each() do |val|
    if val = :avg && final_val = :poor
        final_val = :avg
    end
    if val = :best && final_val = :avg
        final_val = :best
    end
end
return final_val

答案 2 :(得分:0)

您可以按照以下方式实现所需:

def final_value(values)
    val = :poor;
    values.each do|k, v|
        if(v==:best)
            val=:best;
            break;
        elsif(val==:poor && v==:avg)
            val=:avg;
        end
    end
    puts "Final value is: "+val.to_s;
end

values = {:type1=>:poor, :type2=>:avg, :type3=>:best};
final_value(values)

答案 3 :(得分:0)

def compare(h,val)
 m = ((h.has_value?(val) and val != :poor) ? ((val == :best or h.has_value?(:best))? :best : :avg ) : :poor)
end
h = {:type1=>:poor, :type2=>:avg, :type3=>:best}

p compare(h,:avg) #:best
p compare(h,:trr) #:poor
p compare(h,:best) #:best