[英]How to treat an Array with two elements as-like a Hash key / value pair?
我正在使用Ruby on Rails 3.2.2。 我有以下场景:
# hash_params.class
# => Hash
# hash_params.inspect
# => { :key1 => :value1, :key2 => value2, ... => ... }
#
def self.method_1(hash_params)
hash_params.each do { |hash_param| self.method_2(hash_param) }
end
# param.class
# => Array
# param.inspect
# => [:key1, value1] # or '[:key2, value2]' or '[..., ...]', depending on cases.
#
def self.method_2(param)
logger.debug "Key => #{param[0])"
logger.debug "Value => #{param[1])"
end
鉴于在上面的代码中注释掉的输出,当我运行method_1
然后在logger文件中我有以下内容:
Key => :key1
Value => :value1
Key => :key2
Value => :value2
Key => ...
Value => ...
我想将method_2
的param
变量视为一个键/值对 ( 而不是数组),例如通过制作类似下面的内容
def self.method_2(param)
param do |key, value| # Note: This code line doesn't work. It is just a sample code to clarify the question.
logger.debug "Key => #{key.inspect)"
logger.debug "Value => #{value.inspect)"
end
end
? 可能吗? 如果是这样,怎么样? 你有什么建议?
使用Hash[]
:
param = [:key1, 'value1']
h = Hash[*param]
puts h[:key1]
输出:
值1
怎么样
def self.method_1(hash_params)
hash_params.each do { |key, value| self.method_2(key, value) }
end
def self.method_2(key, value)
logger.debug "Key => #{key)"
logger.debug "Value => #{value)"
end
否则你仍然可以在param中传递一个哈希值
def self.method_1(hash_params)
hash_params.keys.each do { |key| self.method_2(hash_params.slice(key)) }
end
编辑 :如果你想要一个哈希作为参数你可以做
def self.method_1(hash_params)
hash_params.each do { |key, value| self.method_2({key => value}) }
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.