【问题标题】:Get key from inner Hash从内部哈希中获取密钥
【发布时间】:2019-02-24 14:51:22
【问题描述】:

我想从内部哈希中获取值。在这种情况下,RU - 始终是第一个值。

PAYMENT_TYPE_TO_CURRENCY_AND_COUNTRY_MAPPING = {
    zimpler:              { 'EUR' => ['FI'], 'SEK' => ['SE'] },
    qiwi:                 { 'EUR' => ['RU', 'KZ'], 'RUB' => ['RU'], 'KZT' => ['KZ'], 'USD' => ['UA'] },
    payu:                 { 'CZK' => ['CZ'], 'PLN' => ['PL']},
    entercash:            { 'EUR' => ['AT', 'DE', 'FI'], 'SEK' => ['SE'] },
    carulla:              { 'USD' => ['CO'] }
}

我试过这个:

PAYMENT_TYPE_TO_CURRENCY_AND_COUNTRY_MAPPING.each do |payment_method_key, array|

        p payment_method_key.to_s /// prints "qiwi" - OK

        p array.keys.first /// prints "EUR" - OK

        p array[array.keys.first] //// prints ["RU", "KZ"] - not OK - need only RU
end

如何实现这个功能?

【问题讨论】:

  • 为什么我会被否决?
  • array[array.keys.first].first?
  • 非常好!谢谢!

标签: ruby rspec


【解决方案1】:

我不清楚您是否每次只想获取第一个元素(之前的答案完成了),或者您是否每次只想要一个“特定”元素。允许您选择特定国家/地区(无论它们在数组中的哪个位置)的另一种方法是:

PAYMENT_TYPE_TO_CURRENCY_AND_COUNTRY_MAPPING.each_pair do |method, currencies|
    currencies.each_pair do |currency, countries|
        countries.each do |country|
            p country if country == "RU"
        end
    end
end

output:
=> "RU"
   "RU"

return value would be the original hash:
=> {:zimpler=>{"EUR"=>["FI"], "SEK"=>["SE"]},
:qiwi=>{"EUR"=>["RU", "KZ"], "RUB"=>["RU"], "KZT"=>["KZ"], "USD"=>["UA"]},
:payu=>{"CZK"=>["CZ"], "PLN"=>["PL"]},
:entercash=>{"EUR"=>["AT", "DE", "FI"], "SEK"=>["SE"]},
:carulla=>{"USD"=>["CO"]}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多