如何在ruby中循环哈希并确定最终值
我有一个这样打印的变量:如何在ruby中循环哈希并确定最终值,ruby,Ruby,我有一个这样打印的变量: {:type1=>:poor, :type2=>:avg, :type3=>:best} 我想迭代这个散列并根据以下规则打印出最终值 如果任何类型的值为:best,则最终值为best 如果任何类型的值为:avg,并且没有最佳值,则最终值为avg 否则最终值为poor 基本上最强者获胜 我尝试了以下几点 def final_value(values) val = "poor" values.each do |key, val| end
{:type1=>:poor, :type2=>:avg, :type3=>:best}
我想迭代这个散列并根据以下规则打印出最终值
- 如果任何类型的值为
,则最终值为:best
best
- 如果任何类型的值为
,并且没有:avg
,则最终值为最佳值
avg
- 否则最终值为
poor
def final_value(values)
val = "poor"
values.each do |key, val|
end
val
end
像这样的东西
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
像这样的东西
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
使用哈希的has\u值?方法
val = :poor;
val = :avg if values.has_value?(:avg);
val = :best if values.has_value?(:best);
val
使用哈希的has\u值?方法
val = :poor;
val = :avg if values.has_value?(:avg);
val = :best if values.has_value?(:best);
val
您可以通过以下方式实现所需:
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)
您可以通过以下方式实现所需:
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)
你也有符号
:poor
等,但你写的时候好像有变量/方法poor
等。然后,你甚至提到字符串“poor”
等。我只是把它们当作循环中的字符串,即使它们是符号。你也有符号:poor
等,但是你写的时候好像有变量/方法poor
等等。然后,你甚至提到字符串“poor”
等等。我只是把它们当作循环中的字符串,即使它们是符号+1个好答案-事实上,迭代是不必要的!您可以通过先查找best
来稍微改进它,因为在has\u value的实现中,您可能不需要查找avg
@alfa?
方法进行迭代。迭代是必要的,这只是一个显式或隐式迭代的问题。@AlexWayne我想你明白我的意思了,不是吗?:)以防万一:我将它与cainy393的答案进行了比较——我的意思是没有必要实现迭代,因为Ruby使用has\u value?
为您实现迭代。“隐式”方法更优雅——这就是我的意思。顺便说一句,如果实现更改为持有“相反”哈希(其中值指向布尔值“true”)的话,实际上不需要迭代——可以在O(1)中完成。我认为没有实现它的原因是为了不浪费内存空间,这是一个很好的理由。只是一个想法。+1个好答案-事实上,迭代是不必要的!您可以通过先查找best
来稍微改进它,因为在has\u value的实现中,您可能不需要查找avg
@alfa?
方法进行迭代。迭代是必要的,这只是一个显式或隐式迭代的问题。@AlexWayne我想你明白我的意思了,不是吗?:)以防万一:我将它与cainy393的答案进行了比较——我的意思是没有必要实现迭代,因为Ruby使用has\u value?
为您实现迭代。“隐式”方法更优雅——这就是我的意思。顺便说一句,如果实现更改为持有“相反”哈希(其中值指向布尔值“true”)的话,实际上不需要迭代——可以在O(1)中完成。我认为没有实现它的原因是为了不浪费内存空间,这是一个很好的理由。只是一个想法。