2015-05-09 2 views
3

У меня есть код -перебрать Hash для получения значений, соответствующих массив

class Conversion 
    hash ={'I' => 1, 'V' => 5, 'X' => 10, 'L' => 50, 'C' => 100, 'D' => 500, 'M' => 1000} 
    puts "enter the string" 
    input = gets.chomp.upcase.split(//) 
    result = 0 
    hash.each do | key, value | 
    case key 
    when 'M' 
     result = result + value 
    when 'D' 
     result = result + value 
    when 'C' 
     result = result + value 
    when 'L' 
     result = result + value 
    when 'X' 
     result = result + value 
    when 'V' 
     result = result + value 
    when 'I' 
     result = result + value 
    end 
    end 
    puts result 
    end 
    c= Conversion.new 

Я даю строку как MXV через командную строку и преобразования, которые в массив и иметь его в качестве MXV в «вход» , Теперь я хочу перебирать хеш, чтобы получить соответствующие «значения» ключей, которые у меня есть как String в моем массиве. Например, для MXV мне нужны значения = [1000, 10, 5].

Как я могу это сделать?

+0

Вы должны написать, что '' MXV'.each_char.reduce (0) {| t, c | t + hash [c]} # => 1015 '. Имейте в виду, что есть проблема, когда строка, скажем, '' MXIV''' ('' IV ''' '' '' '' '' '' '' '' '. –

ответ

2
arr = [] 
"MXV".each_char do |i| 
arr << hash[i.capitalize] 
end 
arr = [1000, 10, 5] 

или

"MXV".each_char.map { |i| hash[i.capitalize] } 

Если вводимый символ не существует в хэш-ключей

, например:

"MXVabc".each_char.map { |i| hash[i.capitalize] } 

это будет:

=> [1000, 10, 5, nil, nil, 100] 

вам просто нужно использовать метод compact.

"MXVabc".each_char.map { |i| hash[i.capitalize] }.compact 
=> [1000, 10, 5, 100] 
+1

'' MXV ".each_char.map {| i | hash [i.capitalize]} 'лучше;) – kiddorails

+0

да, вы правы. – pangpang

0

Я сделал еще несколько исследований и сослался на этот пост в стеке - Ruby - getting value of hash

и решить мою проблему -

input.each do |i| 
    value = hash[i.to_sym] 
    puts value 
    end 

Благодаря любому, кто нашел время, чтобы посмотреть через вопрос.

Смежные вопросы