movies = { The_Dark_Knight: 10, Justice_League: 1, Wolverine_Origins: 7, Wonder_Woman: 6, Man_of_Steel: 8 }

问题描述 投票:0回答:1
而且我希望Ruby在哈希值中显示电影的标题(在迭代之后),以及诸如此类的等级:

=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,因为掌握它并不是特别困难。我正在制作一个小程序...
ruby string hash symbols
1个回答
0
投票
您可以使用String#gsub-代表“全局替换”,这正是您要执行的操作-用String#gsub替换空格:

_

    您也可以使用 title_as_string = title.to_s.gsub("_", " ") -该方法不会做完全相同的事情,但是在这种情况下,您可以将String#tr替换为String#tr,结果将相同
  1. 使用字符串作为键。写出来不是那么容易,因为您需要使用hashrocket(gsub)语法,但是却完全不需要替换:

  2. tr

  3. 在符号中放置空格-这种方法不常用,但它是完全有效的语法:
  4. =>

  5. [唯一此键和字符串键之间的区别是我已用冒号 movies = { "The Dark Knight" => 10, "Justice League" => 1, # etc } 替换了哈希火箭 movies = { "The Dark Knight": 10, "Justice League": 1, # etc } 。在这种情况下,您仍然需要调用=>,但不需要进行替换。

    正如engineersmnky在评论中指出的,还有其他差异...也许我不建议这种方法,因为它不是很常见

    使用“数据对象”模式。这有点冗长,但也更加明确:

  6. :这似乎是多余的,但实际上更灵活-如果您将这些电影存储在数据库中并想使用ID作为哈希的密钥怎么办?这样,您可以快速查找给定其ID的记录。
  7. 另一件事,您应将.to_s用于多行块。仅将大括号块使用大括号。
© www.soinside.com 2019 - 2024. All rights reserved.