加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – 从数组中添加哈希值

发布时间:2020-12-17 03:42:53 所属栏目:百科 来源:网络整理
导读:我试图从具有相同键和平均值的多个哈希数组创建数组/哈希.我的阵列: [{:amount=897500,:gross_amount=897500,:tax=147500,:hotel_fees=0,:base_fare=750000,:currency="INR"},{:amount=1006500,:gross_amount=1006500,:tax=156500,:base_fare=850000,:curre
我试图从具有相同键和平均值的多个哈希数组创建数组/哈希.我的阵列:

[{:amount=>897500,:gross_amount=>897500,:tax=>147500,:hotel_fees=>0,:base_fare=>750000,:currency=>"INR"},{:amount=>1006500,:gross_amount=>1006500,:tax=>156500,:base_fare=>850000,:currency=>"INR"}]

现在我想返回这样的东西:

{:amount=>952000,:gross_amount=>952000,:tax=>152000,:base_fare=>800000,:currency=>"INR"}

其中value是具有相同键的每个散列的值的平均值.

有一个简单的方法来做到这一点.我尝试过使用合并但货币变为0.

我的尝试:

p[0].merge(p[1]){|k,v1,v2| (v1+v2)/2 unless v1 && v2 == "INR"}

编辑:

实际上我的问题并没有在这里结束,所以在获得平均值后我需要在另一个哈希中插入值.
所以我使用了这样的东西:

price_array = offer_values.map do |v| 
          v.inject do |k,v| 
            k.merge!(price: k[:price].merge(v[:price]){|_,a,b| [a,b].flatten })
          end
        end
        price_array.map do |o|
          o[:price] = {}.tap{ |h| o[:price].each {|k,list| h[k] = list.all?{|e| [Fixnum,NilClass].include? e.class} ? list.map(&:to_i).sum/list.size : list.compact.first ; h  } }
        end

其中offer_array是我的原始/第一个数组在单独的哈希中的那个.我试过2和3个哈希,它正在工作.

如果你们有任何改进代码的建议,它是开放的.

解决方法

对于数组中的两个哈希,如果两个货币键的值都是Fixnum类,则可以使用注入和合并检查,如果没有,则在第一个哈希值中使用货币“INR”的值并使用它:

array = [
  {:amount=>897500,:currency=>"INR"}
]

p array.inject{|k,v| k.merge(v){|_,b].all?{|e| e.is_a?(Fixnum)} ? (a+b)/2 : b}}
# => {:amount=>952000,:currency=>"INR"}

对于阵列中的两个或更多哈希,您可以尝试:

main_array = [
  {:amount=>897500,]
array_result = main_array.flat_map(&:to_a).group_by(&:first).map do |key,array| 
  { 
    key => (
      result = array.inject(0) do |total,(_,value)| 
        value.is_a?(Fixnum) ? total + value : value
      end 
      result.is_a?(Fixnum) ? result / main_array.size : result 
    ) 
  } 
end
p array_result

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读