我正在查询API以获取有关用户电子邮件地址的用户信息.例如:
emails = [{'email' => 'example1@test.com'}, {'email' => 'example2@test.com'}, ... ]
Run Code Online (Sandbox Code Playgroud)
我传递给API的查询哈希必须采用这种格式.API为每个用户找到的信息返回一个哈希数组.如果没有信息,则返回该索引中的空哈希.结果以与查询的顺序相同的顺序返回,即响应数组的第一个索引是信息example1@test.com.示例响应可能如下所示:
response = [{'gender' => 'male', 'age' => '24 - 35'}, {'gender' => 'male'}, ... ]
Run Code Online (Sandbox Code Playgroud)
如何将我的电子邮件哈希数组与响应数组合并,以便我得到类似下面的内容?
combined = [
{'email' => 'example1@test.com', 'gender' => 'male', 'age' => '24 - 35'},
{'email' => 'example2@test.com', 'gender' => 'male'}, ... ]
Run Code Online (Sandbox Code Playgroud)
这怎么样?
emails = [{'email' => 'example1@test.com'}, {'email' => 'example2@test.com'} ]
response = [{'gender' => 'male', 'age' => '24 - 35'}, {'gender' => 'male'}]
combined = emails.each_index.map { |i| emails[i].merge(response[i]) }
Run Code Online (Sandbox Code Playgroud)
另一种实现这一目标的方法,基于@Arup Rakshit的答案:
emails = [{'email' => 'example1@test.com'}, {'email' => 'example2@test.com'} ]
response = [{'gender' => 'male', 'age' => '24 - 35'}, {'gender' => 'male'}]
emails.map.with_index { |hash, i| hash.merge(response[i]) }
Run Code Online (Sandbox Code Playgroud)
我的版本使用Array#zip:
emails = [{'email' => 'example1@test.com'}, {'email' => 'example2@test.com'}]
response = [{'gender' => 'male', 'age' => '24 - 35'}, {'gender' => 'male'}]
combined = emails.zip(response).map { |e, r| e.merge(r) }
# => [{"email"=>"example1@test.com", "gender"=>"male", "age"=>"24 - 35"},
# {"email"=>"example2@test.com", "gender"=>"male"}]
Run Code Online (Sandbox Code Playgroud)