通过提供键Map<>

问题描述 投票:0回答:1
class CurrencyExchange {
  Map<String, double> exchangeRates = {
    'USD': 1.0,
    'EUR': 0.85,
    'JPY': 110.15,
    'GBP': 0.72,
    'AUD': 1.39,
    'CAD': 1.25,
    'CHF': 0.92,
    'CNY': 6.47,
    'HKD': 7.77,
    'NZD': 1.41,
  };

  exchange(double amount, String target) {
    if (exchangeRates.keys.contains(target.toUpperCase())) {
      // Here i want to access the equivalent value of the above key from Map<String, double> exchangeRates
    }
  }
}

我写了这行:

var newAmount = amount * (exchangeRates.values * 1.0);  

但它给了我这个错误:

未为类型“Iterable”定义运算符“*”

dart dictionary
1个回答
0
投票

一种解决方案是从地图中获取元素并检查它是否为

null
。这是有效的,因为如果您请求不在地图中的元素,
[]
运算符将返回
null
:

  exchange(double amount, String target) {
    double? exchangeRate = exchangeRates[target.toUpperCase()];
    if (exchangeRate != null) {
      var newAmount = amount * (exchangeRate * 1.0);
    }
  }

如果您熟悉该语法,您还可以使用模式来组合它:

  exchange(double amount, String target) {
    if (exchangeRates[target.toUpperCase()] case final exchangeRate?) {
      var newAmount = amount * (exchangeRate * 1.0);
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.