[英]Given array of hashes, how can I use select on one key of the hash while evaluating on another key?
[英]Given an array of hashes modify each one to include a key value combination of another hash
示例 1:
array_of_hashes = [{"name"=>"bob", "age"=>30}, {"name"=>"bart", "age"=>35}]
metadata_hash = {"likes"=>["apples", "oranges"], "dislikes"=>["cold"]}
您將如何獲得此 output:
[{"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"]}
預期 Output:
[{"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"}]
arr = [{"name"=>"bob", "age"=>30}, {"name"=>"bart", "age"=>35}]
meta_hash = {"likes"=>["apples", "oranges"], "dislikes"=>["cold"],
"courses"=>["science", "history"]}
您可以按如下方式計算所需的結果。
keys = metadata_hash.keys
#=> ["likes", "dislikes", "courses"]
values = metadata_hash.values
#=> [["apples", "oranges"], ["cold"], ["science", "history"]]
a = values.shift.product(*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
的第一步如下。
values.shift.product(*values)
#=> [["apples", "cold", "science"], ["apples", "cold", "history"],
# ["oranges", "cold", "science"], ["oranges", "cold", "history"]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.