我有两个哈希数组
sent_array = [{:sellersku=>"0421077128", :asin=>"B00ND80WKY"},
{:sellersku=>"0320248102", :asin=>"B00WTEF9FG"},
{:sellersku=>"0324823180", :asin=>"B00HXZLB4E"}]
active_array = [{:price=>39.99, :asin1=>"B00ND80WKY"},
{:price=>7.99, :asin1=>"B00YSN9QOG"},
{:price=>10, :asin1=>"B00HXZLB4E"}]
我想循环遍历sent_array,并找到active_array中:asin中的值等于:asin1中的值的位置,然后将:price的键和值复制到sent_array。结果是这样的:
final_array = [{:sellersku=>"0421077128", :asin=>"B00ND80WKY", :price=>39.99},
{:sellersku=>"0320248102", :asin=>"B00WTEF9FG"},
{:sellersku=>"0324823180", :asin=>"B00HXZLB4E", :price=>10}]
我尝试了这个,但我得到了一个类型错误 - 没有将符号隐式转换为整数(类型错误)
sent_array.each do |x|
x.detect { |key, value|
if value == active_array[:asin1]
x[:price] << active_array[:price]
end
}
end
最佳答案
出于效率和可读性的考虑,首先在 active_array
上构建查找哈希是有意义的:
h = active_array.each_with_object({}) { |g,h| h[g[:asin1]] = g[:price] }
#=> {"B00ND80WKY"=>39.99, "B00YSN9QOG"=>7.99, "B00HXZLB4E"=>10}
我们现在只需单步执行sent_array
,更新哈希值:
sent_array.each { |g| g[:price] = h[g[:asin]] if h.key?(g[:asin]) }
#=> [{:sellersku=>"0421077128", :asin=>"B00ND80WKY", :price=>39.99},
# {:sellersku=>"0320248102", :asin=>"B00WTEF9FG"},
# {:sellersku=>"0324823180", :asin=>"B00HXZLB4E", :price=>10}]
当然,从哈希 (h
) 中检索键值对比在哈希数组中搜索键值对要快得多。
关于arrays - 当唯一 ID 匹配时,将键值对添加到哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31035567/