从地图获取密钥名称

时间:2018-09-12 12:34:11

标签: ruby

我有这个Ruby结构

AMOUNT_LIMITS = {
    qqpay: {
      cny: { min: 10_00,     max: 10_00_00 }
    },
    online_banking: {
      cny: { min: 10_00,     max: 50_000_00 },
      thb: { min: 10_00,     max: 500_000_00 },
      idr: { min: 10_000_00, max: 50_000_000_00 },
      myr: { min: 10_00,     max: 10_000_00 }
    },
    bank_payout: {          
      thb: { min: 350_00,    max: 350_00 },
      idr: { min: 50_000_00, smax: 50_000_00 },
      myr: { min: 50_00,     max: 50_00 }
    }

如何从地图上获取货币类型?例如:

AMOUNT_LIMITS[transaction_type.to_sym].sample

我只需要键cny作为字符串。

1 个答案:

答案 0 :(得分:1)

要获取具有权重的样本:

AMOUNT_LIMITS.values.flat_map { |h| h.map(&:first) }.sample.to_s
#⇒ 'thb'

要获得具有相同概率的任何货币,请在中间使用uniq

AMOUNT_LIMITS.values.flat_map { |h| h.map(&:first) }.uniq.sample.to_s
#⇒ 'cny'

要根据交易类型获取货币,

AMOUNT_LIMITS[:onlibe_banking].keys.sample.to_s
#⇒ 'cny'