簡體   English   中英

當符號是 hash 中的鍵時,如何將帶有下划線的符號(例如 The_Dark_Knight)轉換為單詞之間有空格的字符串?

[英]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}"
} 

這就是我的做法,相信我,當我告訴你我花了很長時間才弄清楚這一點時。 它得到了我想要的結果,但是......

...問題是:有沒有更簡潔或更好的方法來做到這一點? 如果是這樣,怎么做?

答案將不勝感激。

有很多方法可以做同樣的事情。

  1. 您可以使用String#gsub - 這代表“全局替換”,這正是您想要做的 - 將_替換為空格:

     title_as_string = title.to_s.gsub("_", " ")

    您也可以使用String#tr - 該方法不會做完全相同的事情,但在這種情況下,您可以將gsub替換為tr並且它會產生相同的結果

  2. 使用字符串作為鍵。 寫出來並不容易,因為您需要使用 hashrocket ( => ) 語法,但消除了對替換的全部需求:

     movies = { "The Dark Knight" => 10, "Justice League" => 1, # etc }
  3. 在您的符號中放置空格 - 這種方法並不常用,但它是完全有效的語法:

     movies = { "The Dark Knight": 10, "Justice League": 1, # etc }

    這個鍵和字符串鍵之間 的唯一 區別是我用冒號替換了 hashrocket => : 在這種情況下,您仍然需要調用.to_s但不需要進行替換。 正如engineersmnky在評論中指出的那樣,還有其他差異......我可能不會建議這種方法,因為它不是很常見

  4. 使用“數據對象”模式。 這有點冗長但也更明確:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM