2015-02-02 1 views
0

대부분의 해시 키는 단일 단어 이름입니다. 예를 들어 영화 이름과 평점을 사용합시다. 즉 기호를 쉽게 만들 수 :Ruby : 여러 단어 문자열을 기호로 사용/바꾸는 방법

my_hash = { Ferris_Bueller: 5}

내가 내 키 이름에 밑줄을 사용하지만 상징으로 해당 문자열을 필요로하지 않으려면? 나는이 일을 생각하지만, 그것은 작동하지 않습니다

my_hash = { "Ferris Bueller": 5}

문제는, 나는 영화의 이름을 사용자에게 메시지를 표시하기 위해 노력하고있어, 다음 키로 그 값을 추가, 평점/값 쌍은 my_hash입니다. 사람들은 보통 밑줄없이 2 단어의 영화를 입력합니다. 그 해쉬를 심볼로 저장하기 위해 그 키를 얻으려면 어떻게해야합니까? 즉 : 같은 Robo Cop 같은

puts "Name a movie:" name = gets.chomp puts "Rate it 1-5:" rating = gets.chomp my_hash[name.to_sym] = rating

사용자 유형 두 단어 영화. 왜이 일을하지 않습니까? 당신이 작업하는 실제로 해시 로켓을 사용해야 할 수도 있음을 얻기 위하여

+0

'왜이 일을 못해를 '그것은 ... 작업을 수행 – August

+0

믿을 여기에 예입니다. 나는 repl.it을 사용하고 있었고, 이것으로 나에게 오류가 발생했다. 다시 시도하고 작동합니다. 나는 단지 그것을 얻지 않는다. 8 월 고마워. –

답변

0

...

my_hash = { :"Ferris Bueller" => 5} 
+0

나는 이것도 시험해 보았고, 실제로 작동한다. 내가 사용한 원래 코드도 잘 작동한다. repl.it 엔진이나 뭐 그런 결함이 있었음에 틀림 없다. 나는 많이 새로 고치는 법을 배우고있다. –

1

또한 .gsub 사용할 수 있습니다! _을 공백으로 변환 한 다음 .gsub! 다시 그것을 변환합니다. 이렇게하면 코드는 여전히 등록되어 있지만 사용자는 밑줄을 볼 수 없습니다.

movies = { 
The_Raven: 4, 
I_Robot: 3 
} 

puts "Howdy, please select one of the following." 
choice = gets.chomp 
case choice 
when "update" 
puts "Please select which movie you'd like to update." 
title = gets.chomp 
title.gsub!(/ /, "_") 
#By doing this, the user can type 'The Raven' and Ruby will be able to 
#register it as a title in your movies hash. 
if 
    movies[title.to_sym].nil? 
    puts "That movie doesn't exist in our inventory!" 
else 
    puts "What would you like to change the rating to? (Rating must be 1 - 5)" 
    rating = gets.chomp 
    movies[title.to_sym] = rating.to_i 
    title.gsub!(/_/, " ") 
#Then you convert it back from an underscore to a space. This way Ruby 
#will display to the user the title without underscores. 
    puts "#{title} has been updated with a new rating of #{rating}." 
end`enter code here` 
1

당신이 표기법을 사용하여 여러 단어 기호 만들 수 있습니다 :

:"multi word symbol" => value 
관련 문제