[英]How to detect when a string has a common business suffix (e.g. “Inc.”, “LLC', ”GmbH")
[英]How do I turn a symbol , that has underscores (e.g. The_Dark_Knight), when the symbol is a key in a hash into a string with spaces in between words?
我是編碼新手,只做了大約 12 天,所以請原諒我的 n00biness。 我決定先學習 Ruby,因為它並不是特別難掌握。 我正在制作一個跟蹤和存儲用戶信息的小程序。 在代碼的這個特定部分中,我想跟蹤和存儲用戶如何評價特定電影。 我一直在玩一些功能,例如添加、顯示、刪除和更新電影(這四個元素是案例陳述中的“時間”)。 我在顯示部分遇到了障礙。
hash,有問題,我一直用來測試的程序是(免責聲明:電影評級無意冒犯):
movies = {
The_Dark_Knight: 10,
Justice_League: 1,
Wolverine_Origins: 7,
Wonder_Woman: 6,
Man_of_Steel: 8
}
我希望 Ruby 顯示 hash 中的電影標題(在遍歷它們之后)以及如下評級:
=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}"
}
這就是我的做法,相信我,當我告訴你我花了很長時間才弄清楚這一點時。 它得到了我想要的結果,但是......
...問題是:有沒有更簡潔或更好的方法來做到這一點? 如果是這樣,怎么做?
答案將不勝感激。
有很多方法可以做同樣的事情。
您可以使用String#gsub
- 這代表“全局替換”,這正是您想要做的 - 將_
替換為空格:
title_as_string = title.to_s.gsub("_", " ")
您也可以使用String#tr
- 該方法不會做完全相同的事情,但在這種情況下,您可以將gsub
替換為tr
並且它會產生相同的結果
使用字符串作為鍵。 寫出來並不容易,因為您需要使用 hashrocket ( =>
) 語法,但消除了對替換的全部需求:
movies = { "The Dark Knight" => 10, "Justice League" => 1, # etc }
在您的符號中放置空格 - 這種方法並不常用,但它是完全有效的語法:
movies = { "The Dark Knight": 10, "Justice League": 1, # etc }
這個鍵和字符串鍵之間
的唯一
區別是我用冒號替換了 hashrocket =>
:
。 在這種情況下,您仍然需要調用.to_s
但不需要進行替換。 正如engineersmnky在評論中指出的那樣,還有其他差異......我可能不會建議這種方法,因為它不是很常見
使用“數據對象”模式。 這有點冗長但也更明確:
movies = { The_Dark_Knight: { name: "The Dark Knight", rating: 10 }, Justice_League: { name: "Justice League", rating: 1 } } movies.each {|key, data| title_as_string = data[:name] rating = data[:rating] # etc }
這可能看起來多余,但實際上更靈活 - 如果您將這些電影存儲在數據庫中並想使用 ID 作為 hash 的密鑰,該怎么辦? 這樣您就可以根據他們的 ID 快速查找記錄。
另一件事,您應該使用do... end
作為您的多行塊。 僅對 oneliner 塊使用大括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.