从数组中获取单个哈希

Get single hash from array

我有一个哈希数组:

[<name: bob, age: 25, orders: 3>, <name: george, age: 21, orders: 2>, <name: sandy, age: 23, orders: 5>, <name: sandy, age: 21, orders: 4>]

我想要一个基于两个条目挑选出单个散列的函数。即我输入了 name="sandy" age=21。它会返回一个简单的散列

我试过了Array.select {|e| e["name"] == "sandy" and e["age"] == 21} 由于某种原因,我取回了整个数组。

在上面我试图隔离有问题的代码。我似乎仍然有问题,下面是完整的代码。我已经来回调试了很多次。此代码中的某些内容可能仍然令人反感...

    @budgets = Budget.all
    @budgetArray = @budgets.to_a
    @actuals = GeneralLedger.select("account_id, entryDate, sum(amount), CASE WHEN MONTH(entryDate) >= 4 THEN concat(YEAR(entryDate), '') ELSE concat(YEAR(entryDate)-1, '') END as fiscalY").group('account_id, fiscalY').order('account_id').to_a
    @currentYear = 2021
    @numGLYears=2
    #@numGLYears = GeneralLedger.select('count(distinct CASE WHEN MONTH(entryDate) >= 4 THEN concat(YEAR(entryDate), '') ELSE concat(YEAR(entryDate)-1, '') END) as fiscalY FROM general_ledgers').to_s.to_i
    @budgetTable = Array.new
    budgetRow = Array.new
    @budgetArray.each do |b|
        budgetRow.clear
        i=@numGLYears
        #budgetRow.push b.account_id
        while i >= 1
            budgetRow.push getBudget(@budgetArray, @currentYear-i, b.account_id)
            budgetRow.push getActuals(@actuals, @currentYear-i, b.account_id)
            i=i-1
        end
        @budgetTable.push budgetRow
    end
  end

  def getBudget(myArray, year, account)
    rtn = myArray.select{ |e| (e["year"] == year.to_s) and (e["account_id"] == account.to_s)}
    if rtn.nil?
        return '-'
    else
        return rtn
    end
    #get budget if there else '-'
  end
  
  def getActuals(myArray, year, account)
    rtn = myArray.find{ |e| e["year"] == year.to_s and e["account_id"] == account.to_s}
    if rtn.nil?
        return '********************' + year.to_s + account.to_s
    else
        return rtn
    end
  end

select returns 一个包含所有满足条件的元素的数组。尝试 find,这将 return 第一个 单个 符合您条件的项目。

还要确保您的散列具有字符串形式的键而不是符号,否则您将无法匹配您的任何条件。 e[:name]e["name"]是有区别的。

https://apidock.com/ruby/Array/select

https://apidock.com/ruby/Enumerable/find