一般来说哪个更好用?:
case n
when 'foo'
result = 'bar'
when 'peanut butter'
result = 'jelly'
when 'stack'
result = 'overflow'
return result
或
map = {'foo' => 'bar', 'peanut butter' => 'jelly', 'stack' => 'overflow'}
return map[n]
更具体地说,我应该何时使用case-statement,何时应该使用hash?
答案 0 :(得分:11)
哈希是一种数据结构,case语句是一种控制结构。
当您只是检索某些数据时(例如您提供的示例中),您应该使用哈希值。如果需要执行其他逻辑,则应编写案例陈述。
此外,如果您需要执行某些模式匹配,则使用case语句是有意义的:
#pattern matching using ranges
letterGrade = case score
when 0..64 then "F"
when 65..69 then "D"
when 70..79 then "C"
when 80..89 then "B"
when 90..100 then "A"
else "Invalid Score"
end
#pattern matching using regular expressions
case songData
when /title=(.*)/
puts "Song title: #$1"
when /track=(.*)/
puts "Track number: #$1"
when /artist=(.*)/
puts "Artist name: #$1"
end
答案 1 :(得分:8)
一般来说,编程中的“更好”意味着不同的东西。例如,更好的程序
等
由于我们讨论的是Ruby,因此性能通常不太重要。如果您确实需要性能,可以考虑另一种编程语言。所以,我先看看标准(1)和(2)。看起来更好的Ruby代码通常代表一个“更好”的程序。哪个代码看起来更好?哪个表达意图更好?如果添加/删除逻辑,哪个更容易修改?这取决于你的问题,这在某种程度上是一种品味问题。
对我而言,在您的简短示例中,哈希解决方案更好。案例解决方案提供了更大的灵活性,在这种情况下您不需要(但在其他情况下可能需要)。
答案 2 :(得分:3)
哈希表和案例陈述之间存在两个主要区别。
case n
when 'foo'
'bar'
when 'peanut butter'
'jelly'
when 'stack'
'overflow'
end
这相当于你的代码,在使用Ruby或函数式编程语言一段时间之后,它对你来说会更自然。它也更短。