hash最小值过滤算法

[["数量","包装","价格"],["数量","包装","价格"],["数量","包装","价格"]] 

要求取出相同包装数量的最低价格结果集 

例子:[[10,"kg",200],[10,"kg",300],[20,"kg",100],[20,"kg",200],[30,"kg",200]] 
 

Ruby代码 

 收藏代码

  1. results = [[10,"kg",200],[10,"kg",300],[20,"kg",100],[20,"kg",200],[30,"kg",200]]  
  2. result_hash = {}  
  3. results.each do |result|  
  4.      result_hash[result[0]] = result unless result_hash[package_unit].present? && result_hash[result[0]][0] > result[0]  
  5. end  
  6. results = result_hash.values  





StockChemicalPrice 模型下有一个字断记录报价方案: 
{levels: "5,10,100", prices: "100,200,300", fees: "0,0,10"} 
解析报价方案,取同包装最低报价方案 
 

Ruby代码 

 收藏代码

  1. def get_stock_hash(source_entity_type)  
  2.     return_result = []  
  3.     purity_stock  = StockChemicalPrice.standard_package.where(active: 1, stock_chemical_id: self.id, source_entity_type: source_entity_type).group_by(&:purity)  
  4.     purity_stock.each do |purity,stocks|  
  5.       stocks.group_by(&:package_unit).each do |package_unit,stock|  
  6.         results = []  
  7.         stock.each do |data|  
  8.           purity = purity  
  9.           package_unit = package_unit  
  10.           package_unit_int = data.package_unit_before_type_cast  
  11.           stock_id = data.id  
  12.           levels = data.hash_rules[:levels].split(',')  
  13.           prices = data.hash_rules[:prices].split(',')  
  14.           levels.each_with_index do |l,i|  
  15.             results << [stock_id,"#{l}#{package_unit}",purity,package_unit,prices[i],l,package_unit_int]  
  16.           end  
  17.           if levels.uniq != levels  
  18.             result_hash = {}  
  19.             results.each do |result|  
  20.               result_hash[result[4]] = result unless result_hash[package_unit].present? && result_hash[result[4]][4] > result[4]  
  21.             end  
  22.             results = result_hash.values  
  23.           end  
  24.         end  
  25.         return_result += results  
  26.       end  
  27.     end  
  28.     return return_result  
  29.   end  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值