Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 迭代哈希以检索与数组匹配的值_Arrays_Ruby_Iteration_Hash - Fatal编程技术网

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

Arrays 迭代哈希以检索与数组匹配的值,arrays,ruby,iteration,hash,Arrays,Ruby,Iteration,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

我有密码-

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。 现在我想迭代散列,这样就可以得到数组中作为字符串的键的相应“值”。 对于ex,对于MXV,我需要值=[1000,10,5]


我该怎么做呢?

我做了更多的研究,并参考了stack上的这篇文章-

解决了我的问题-

  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]
如果您输入的字符在哈希键中不存在

例如:

"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]

您可以编写
'MXV'。每个字符.reduce(0){t,c | t+hash[c]}}=>1015
。请注意,如果字符串是,比如说,
'MXIV'
'IV'
4
)。
“MXV”。每个字符映射{i | hash[i.capitalize]}
更好;)
"MXVabc".each_char.map { |i| hash[i.capitalize] }.compact
=> [1000, 10, 5, 100]