2012-12-09 53 views
0

我有將1之間返回一個數的方法 - 根據所述響應(x)是否是 之間100 100匹配響應於數字多量程

- 90我想一個響應,89 - 85另一個84 - 72另一...等

我用

if x > 90 
response a 
elsif x > 85 
response b 
elsif etc... 

但這似乎有些凌亂,有沒有這個重構的一個更好的辦法?

非常感謝。

+0

「響應X」是代碼(命令式代碼)還是表達式? – tokland

+0

http://codereview.stackexchange.com將是適當的地方。 –

回答

6

Range#===優勢和使用case聲明:

case x 
when 72..84 
    # Do something 
when 85..89 
    # Do something 
when 90..100 
    # Do something 
else 
    # Do something when no matches 
end 
3

你可以嘗試一個表(Hash),其中鍵是範圍和值AR的數字要返回:

T = { 
    (90..100) => 1, 
    (85..89) => 2, 
    # and so on 
} 

(r,v) = T.find {|r,v| r.member? x} 

if v then 
    return v 
else 
    # x wasn't in any of the defined ranges 
end 
+0

+1我會寫的代碼有所不同(一個小平面map_detect,我不認爲OP需要知道的範圍鍵),但'哈希{範圍=>值}'是要走的最簡單的方法。 – tokland

+0

我的意思是:'value = T.map_detect {| range,v | v如果range.include?(x)} || default_value'。 – tokland

+0

理想,這是非常有益的,謝謝。 – RMcNairn