代码之家  ›  专栏  ›  技术社区  ›  Pete J

获取与最小数量匹配的哈希

  •  -1
  • Pete J  · 技术社区  · 7 年前

    我有一个哈希数组:

    arr_of_hsh =[
      {minimum_quantity: "250", cost: "1.5600"},
      {minimum_quantity: "500", cost: "1.3500"},
      {minimum_quantity: "1000", cost: "1.1800"},
      {minimum_quantity: "2500", cost: "1.0200"}
    ]
    

    给定一定数量,我想得到其值为 :minimum_quantity

    {minimum_quantity: "250", cost: "1.5600"}
    

    如果金额为1000:

    {minimum_quantity: "1000", cost: "1.1800"}
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Ursus    7 年前

    保持您的数据结构不变,我会这样说

     arr_of_hsh.select { |item| item[:minimum_quantity].to_i <= quantity }.
       max_by { |item| item[:minimum_quantity].to_i }
    
        2
  •  1
  •   Cary Swoveland    7 年前

    def f(arr, qty)
      h = arr.min_by do |h|
        n = h[:minimum_quantity].to_i
        n <= qty ? (qty-n) : Float::INFINITY
      end
      h[:minimum_quantity].to_i <= qty ? h : nil 
    end
    
    (100..1100).step(100).each { |qty| puts "#{qty}: #{f(arr_of_hsh, qty)}" }
     100: nil
     200: nil
     300: {:minimum_quantity=>"250",  :cost=>"1.5600"}
     400: {:minimum_quantity=>"250",  :cost=>"1.5600"}
     500: {:minimum_quantity=>"500",  :cost=>"1.3500"}
     600: {:minimum_quantity=>"500",  :cost=>"1.3500"}
     700: {:minimum_quantity=>"500",  :cost=>"1.3500"}
     800: {:minimum_quantity=>"500",  :cost=>"1.3500"}
     900: {:minimum_quantity=>"500",  :cost=>"1.3500"}
    1000: {:minimum_quantity=>"1000", :cost=>"1.1800"}
    1100: {:minimum_quantity=>"1000", :cost=>"1.1800"}
    

    arr_of_hsh 阿鲁的阿鲁 减少 价值 arr_by_hsh[:minimum_quantity.to_i Enumerable#find

    def f(arr, qty)
      h = arr.find { |h| h[:minimum_quantity].to_i <= qty }
    end
    
    arr = arr_of_hsh.sort_by { |h| -h[:minimum_quantity].to_i }
      #=> [{:minimum_quantity=>"2500", :cost=>"1.0200"},
      #    {:minimum_quantity=>"1000", :cost=>"1.1800"}, 
      #    {:minimum_quantity=>"500", :cost=>"1.3500"},
      #    {:minimum_quantity=>"250", :cost=>"1.5600"}]
    (100..1100).step(100).each { |qty| puts "#{qty}: #{f(arr, qty)}" }
      #=> (same as above)
    
    推荐文章