=begin
The Dark Knight: 10
Justice League: 1
Wolverine Origins: 7
Wonder Woman: 6
Man of Steel: 8
=end
这是case语句的显示部分。用户选择“何时”显示时,应该向他们显示电影的标题以及评级,如上所示。
when "display" movies.each {|title, rating| title_as_string = title.to_s.split('_').map(&:capitalize).join(' ') puts "#{title_as_string}: #{rating}" }
这是我遵循的方式,当我告诉你时,我相信了我花了很长时间才弄清楚这一点。它得到了我想要的结果,但是...
...问题是:有没有更简洁或更完善的方法?如果是这样,如何?答案将非常感谢。
我是编码的新手,只做了大约12天,所以请原谅我。我决定首先学习Ruby,因为掌握它并不是特别困难。我正在制作一个小程序...
String#gsub
-代表“全局替换”,这正是您要执行的操作-用String#gsub
替换空格:_
title_as_string = title.to_s.gsub("_", " ")
-该方法不会做完全相同的事情,但是在这种情况下,您可以将String#tr
替换为String#tr
,结果将相同使用字符串作为键。写出来不是那么容易,因为您需要使用hashrocket(gsub
)语法,但是却完全不需要替换:
tr
=>
movies = {
"The Dark Knight" => 10,
"Justice League" => 1,
# etc
}
替换了哈希火箭 movies = {
"The Dark Knight": 10,
"Justice League": 1,
# etc
}
。在这种情况下,您仍然需要调用=>
,但不需要进行替换。 正如engineersmnky在评论中指出的,还有其他差异...也许我不建议这种方法,因为它不是很常见
使用“数据对象”模式。这有点冗长,但也更加明确:
:
这似乎是多余的,但实际上更灵活-如果您将这些电影存储在数据库中并想使用ID作为哈希的密钥怎么办?这样,您可以快速查找给定其ID的记录。 .to_s
用于多行块。仅将大括号块使用大括号。