使用hash或case-statement [Ruby]

use*_*154 6 ruby hash case

一般哪个更好用?:

case n
when 'foo'
 result = 'bar'
when 'peanut butter'
 result = 'jelly'
when 'stack'
 result = 'overflow'
return result
Run Code Online (Sandbox Code Playgroud)

要么

map = {'foo' => 'bar', 'peanut butter' => 'jelly', 'stack' => 'overflow'}
return map[n]
Run Code Online (Sandbox Code Playgroud)

更具体地说,我何时应该使用case语句,何时应该只使用哈希?

dby*_*rne 11

哈希是数据结构,case语句是控制结构.

当您只是检索某些数据时(例如您提供的示例中),您应该使用哈希值.如果需要执行其他逻辑,则应编写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



Igo*_*kon 8

一般来说,编程中的"更好"意味着不同的东西.例如,更好的计划

  1. 更容易理解,即更好地表达意图
  2. 更容易维护.例如,代码行少,容易出错等.
  3. 在执行时间方面具有更好的性能
  4. 在内存使用方面具有更好的性能

等等

由于我们讨论的是Ruby,因此性能通常不太重要.如果您确实需要性能,可以考虑另一种编程语言.所以,我先看看标准(1)和(2).看起来更好的Ruby代码通常代表一个"更好"的程序.哪个代码看起来更好?哪个表达意图更好?如果添加/删除逻辑,哪个更容易修改?这取决于你的问题,这在某种程度上是一种品味问题.

对我来说,在您的简短示例中,哈希解决方案更好.案例解决方案提供了更大的灵活性,在这种情况下您不需要(但在其他情况下可能需要).