我有一个小但令人讨厌的问题:我的API调用经常返回一个单元素的数组,这是一个哈希如下:
foo = [{"key1" => 1, "key2" => 10}]
我必须从哈希中提取一个值,如下所示:foo[0]["key2"]
。是否有更优化/更正确的方法?
答案 0 :(得分:0)
您可以通过[0]
/ first
获取第一个元素(哈希):
foo = [{"key1" => 1, "key2" => 10}]
foo[0]
# => {"key1" => 1, "key2" => 10}
foo.first
# => {"key1" => 1, "key2" => 10}
或使用Ruby的并行分配:
foo, _ = [{"key1" => 1, "key2" => 10}]
foo
# => {"key1" => 1, "key2" => 10}
这只将第一个元素分配给foo
而不是整个数组。
如果您反复这样做,最好在您正在使用的API之上实现自定义方法。
答案 1 :(得分:0)
像Tilo一样:
results.each{|r| do_something_with( r['key2] )}
你也可以这样做:
results = [{"key1"=>1, "key2"=>10}]
results, _ = results
results.each{|key, result| do_something_with( result )}
仅使用result['key2']
result
答案 2 :(得分:0)
根据您对提取值的处理方式,.each
或.collect
听起来是您的最佳选择。以下是collect
的示例:
results = [{"key1"=>1, "key2"=>10}]
key2_array = results.collect{|result| result["key2"]}
# key2_array contains [10]
results = [{"key1"=>1, "key2"=>10},{"key1"=>2, "key2"=>20},{"key1"=>3, "key2"=>30}]
key2_array = results.collect{|result| result["key2"]}
# key2_array contains [10,20,30]
答案 3 :(得分:0)
如果问题只是让你的代码看起来更清晰,你可以围绕API调用编写一个包装器方法:
def my_api_wrapper(x, y, z)
fb_api_call(x, y, z).first
end
# Later...
foo = my_api_wrapper(x, y, z)
foo["key2"]