根据条件从哈希中删除元素

时间:2015-08-11 13:40:31

标签: ruby hash

我有这些参数:

Parameters: {transactions"=>{
  "2"=>{"amount"=>"10", "finance_id"=>"4", "payee_id"=>"5", "category_id"=>"14", "payee_type"=>"Student", "transaction_date"=>"2015-08-10", "title"=>"Receipt No.. (Multiple Fees) F4", "finance_type"=>"FinanceFee", "payment_mode"=>"Cash", "payment_note"=>""},
  "1"=>{"amount"=>"10", "finance_id"=>"4", "payee_id"=>"2", "category_id"=>"14", "payee_type"=>"Student", "transaction_date"=>"2015-08-10", "title"=>"Receipt No.. (Multiple Fees) F4", "finance_type"=>"FinanceFee", "payment_mode"=>"Cash", "payment_note"=>""}
}}

我需要设置一个条件来删除amount = 0的交易。我试过这个:

params[:transactions].each do |trans|
  trans.delete_if {|amount, value| value == 0 || value.nil? || value.empty?} 
end

但这不会使用amount 0删除交易。

2 个答案:

答案 0 :(得分:2)

试试这个

transactions = {
    "transactions" =>
        {
            "2" => {
                "amount" => "10",
                "finance_id" => "4",
                "payee_id" => "5",


    "category_id" => "14",
            "payee_type" => "Student",
            "transaction_date" => "2015-08-10",
            "title" => "Receipt No.. (Multiple Fees) F4",
            "finance_type" => "FinanceFee",
            "payment_mode" => "Cash",
            "payment_note" => ""
        },
        "1" => {
            "amount" => "10",
            "finance_id" => "4",
            "payee_id" => "2",
            "category_id" => "14",
            "payee_type" => "Student",
            "transaction_date" => "2015-08-10",
            "title" => "Receipt No.. (Multiple Fees) F4",
            "finance_type" => "FinanceFee",
            "payment_mode" => "Cash",
            "payment_note" => ""
        },
        "3" => {
            "amount" => "0",
            "finance_id" => "4",
            "payee_id" => "2",
            "category_id" => "14",
            "payee_type" => "Student",
            "transaction_date" => "2015-08-10",
            "title" => "Receipt No.. (Multiple Fees) F4",
            "finance_type" => "FinanceFee",
            "payment_mode" => "Cash",
            "payment_note" => ""
        },
        "4" => {
            "amount" => nil,
            "finance_id" => "4",
            "payee_id" => "2",
            "category_id" => "14",
            "payee_type" => "Student",
            "transaction_date" => "2015-08-10",
            "title" => "Receipt No.. (Multiple Fees) F4",
            "finance_type" => "FinanceFee",
            "payment_mode" => "Cash",
            "payment_note" => ""
        },
        "4" => {
            "amount" => "",
            "finance_id" => "4",
            "payee_id" => "2",
            "category_id" => "14",
            "payee_type" => "Student",
            "transaction_date" => "2015-08-10",
            "title" => "Receipt No.. (Multiple Fees) F4",
            "finance_type" => "FinanceFee",
            "payment_mode" => "Cash",
            "payment_note" => ""
            }
        }
}

transactions["transactions"].delete_if{|_, v| v["amount"].to_s.strip.to_i == 0}

答案 1 :(得分:0)

您的值是一个字符串,将其转换为整数

value.to_i == 0

value == 0.to_s

value.to_i.zero?