0

我有一个小而烦人的问题:我的 API 调用经常返回一个包含单个元素的数组,它是一个哈希,如下所示:

foo = [{"key1" => 1, "key2" => 10}]

我必须从哈希中提取一个值,如下所示foo[0]["key2"]:有没有更优化/正确的方法来做到这一点?

4

4 回答 4

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 之上实现自定义方法可能是一个好主意。

于 2013-05-16T07:44:12.073 回答
0

就像蒂洛的:

 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

于 2013-05-16T09:56:11.610 回答
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]
于 2013-05-16T10:30:03.813 回答
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"]
于 2013-05-16T10:45:32.330 回答