迭代哈希以检索与数组匹配的值

Iterate over a Hash to retrieve values matching an array

我有代码 -

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 这样的字符串,并将其转换成一个数组,并在 'input' 中将其作为 MXV。 现在我想遍历哈希,这样我就可以得到数组中作为字符串的键的相应 'values' 。 例如,对于 MXV ,我需要 values = [1000, 10, 5].

我该怎么做?

我做了更多研究并在堆栈上提到了这个 post - Ruby - getting value of hash

并解决了我的问题 -

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

感谢所有花时间浏览问题的人。

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]