示例 1:
array_of_hashes = [{"name"=>"bob", "age"=>30}, {"name"=>"bart", "age"=>35}]
metadata_hash = {"likes"=>["apples", "oranges"], "dislikes"=>["cold"]}
您將如何獲得此輸出:
[{"name"=>"bob", "age"=>30, "likes"=>"apples", "dislikes"=>"cold"},
{"name"=>"bob", "age"=>30, "likes"=>"oranges", "dislikes"=>"cold"},
{"name"=>"bart", "age"=>35, "likes"=>"apples", "dislikes"=>"cold"},
{"name"=>"bart", "age"=>35, "likes"=>"oranges", "dislikes"=>"cold"}]
示例 2:
array_of_hashes = [{"name"=>"bob", "age"=>30}, {"name"=>"bart", "age"=>35}]
metadata_hash = {"likes"=>["apples", "oranges"], "dislikes"=>["cold"], "courses"=>["science", "history"]}
預期輸出:
[{"name"=>"bob", "age"=>30, "likes"=>"apples", "dislikes"=>"cold", "courses"=>"science"},
{"name"=>"bob", "age"=>30, "likes"=>"oranges", "dislikes"=>"cold", "courses"=>"history"},
{"name"=>"bob", "age"=>30, "likes"=>"oranges", "dislikes"=>"cold", "courses"=>"science"}
{"name"=>"bob", "age"=>30, "likes"=>"apples", "dislikes"=>"cold", "courses"=>"history"},
{"name"=>"bart", "age"=>35, "likes"=>"apples", "dislikes"=>"cold", "courses"=>"science"},
{"name"=>"bart", "age"=>35, "likes"=>"oranges", "dislikes"=>"cold", "courses"=>"history"},
{"name"=>"bart", "age"=>35, "likes"=>"oranges", "dislikes"=>"cold", "courses"=>"science"}
{"name"=>"bart", "age"=>35, "likes"=>"apples", "dislikes"=>"cold", "courses"=>"history"}]
uj5u.com熱心網友回復:
arr = [{"name"=>"bob", "age"=>30}, {"name"=>"bart", "age"=>35}]
meta_hash = {"likes"=>["apples", "oranges"], "dislikes"=>["cold"],
"courses"=>["science", "history"]}
您可以按如下方式計算所需的結果。
keys, (first_value, *rest_of_values) = metadata_hash.to_a.transpose
#=> [["likes", "dislikes", "courses"], [["apples", "oranges"],
["cold"], ["science", "history"]]]
因此,
keys
#=> ["likes", "dislikes", "courses"]
first_value
#=> ["apples", "oranges"]
rest_of_values = ["cold"], ["science", "history"]]
a = first_value.product(*rest_of_values).map { |arr| keys.zip(arr).to_h }
#=> [{"likes"=>"apples", "dislikes"=>"cold", "courses"=>"science"},
# {"likes"=>"apples", "dislikes"=>"cold", "courses"=>"history"},
# {"likes"=>"oranges", "dislikes"=>"cold", "courses"=>"science"},
# {"likes"=>"oranges", "dislikes"=>"cold", "courses"=>"history"}]
array_of_hashes.flat_map { |h| a.map { |g| h.merge(g) }}
#=> [{"name"=>"bob", "age"=>30, "likes"=>"apples", "dislikes"=>"cold", "courses"=>"science"},
# {"name"=>"bob", "age"=>30, "likes"=>"apples", "dislikes"=>"cold", "courses"=>"history"},
# {"name"=>"bob", "age"=>30, "likes"=>"oranges", "dislikes"=>"cold", "courses"=>"science"},
# {"name"=>"bob", "age"=>30, "likes"=>"oranges", "dislikes"=>"cold", "courses"=>"history"},
# {"name"=>"bart", "age"=>35, "likes"=>"apples", "dislikes"=>"cold", "courses"=>"science"},
# {"name"=>"bart", "age"=>35, "likes"=>"apples", "dislikes"=>"cold", "courses"=>"history"},
# {"name"=>"bart", "age"=>35, "likes"=>"oranges", "dislikes"=>"cold", "courses"=>"science"},
# {"name"=>"bart", "age"=>35, "likes"=>"oranges", "dislikes"=>"cold", "courses"=>"history"}]
計算的第一步a如下。
first_value.product(*rest_of_values)
#=> [["apples", "cold", "science"], ["apples", "cold", "history"],
# ["oranges", "cold", "science"], ["oranges", "cold", "history"]]
請參閱Array#product、Enumerable#flat_map和Hash#merge。陣列分解用于計算keys,first_value和 rest_of_values。有關該主題的更多資訊,請參閱這篇文章(例如)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367933.html
標籤:红宝石
