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]