如何用一行代码将键数组与二维数组合并为目标哈希结构?
Ruby 一行代码实现键数组与二维数组的哈希映射
嘿,这问题其实用Ruby的数组方法组合就能轻松搞定一行代码的解决方案,先直接给你正确的代码:
array1.zip(array2.transpose).to_h
为什么这行代码能 work?
咱们拆解一下步骤:
array2.transpose:把你的二维数组array2进行转置操作,原来的每行元素会变成列。转置后array2就变成了:
这正好对应了你期望哈希里两个键对应的数值数组。[[14646.75, 69454.63, 24989.53, 74455.69, 140448.19, 12309.34], [nil, nil, nil, nil, nil, nil]]array1.zip(...):把array1里的每个键和转置后的array2里的每个子数组一一配对,得到一个包含键值对数组的数组:[[:lien_amount, [14646.75, ...]], [:contact_number, [nil, ...]]].to_h:最后把这个数组直接转换成哈希,完美得到你想要的结果。
为什么你之前的尝试不对?
你用的array2.flat_map {|a| a.zip(array1)}会把每个子数组的元素分别和键配对,比如第一个子数组[14646.75, nil]会被处理成[[14646.75, :lien_amount], [nil, :contact_number]],然后flat_map把所有这些小数组平铺成一个大数组,得到的是零散的键值对,而不是按键分组的结构,自然不符合预期啦。
内容的提问来源于stack exchange,提问作者Daniel Viglione
相关产品推荐
相关产品推荐

