如何通过Dart中的值获取Map键?

Nic*_*ick 13 dictionary key dart

在Dart语言中如何按值获取MAP键?

我有一张地图;

{
  "01": "USD",
  "17": "GBP",
  "33": "EUR"
}
Run Code Online (Sandbox Code Playgroud)

我需要使用值来获取密钥.我怎么做?

Gün*_*uer 24

var usdKey = curr.keys.firstWhere(
    (k) => curr[k] == 'USD', orElse: () => null);
Run Code Online (Sandbox Code Playgroud)

  • @zoechi 竞选总统 (3认同)
  • 我不认为这本身就被记录为一件事。有 Map 的 keys 属性和 Iterable 的 firstWhere 方法,其余的是以有意义的方式一起使用它们。https://api.dartlang.org/stable/2.0.0/dart-core/Map/keys.html,https://api.dartlang.org/stable/2.0.0/dart-core/Iterable/firstWhere。 html (2认同)

Ran*_*rtz 15

如果您将在同一数据上多次执行此操作,您应该创建一个逆映射,以便您可以执行简单的键查找而不是重复的线性搜索。这是反转地图的示例(可能有更简单的方法来执行此操作):

main() {
  var orig = {"01": "USD", "17": "GBP", "33": "EUR"};
  var reversed = Map.fromEntries(orig.entries.map((e) => MapEntry(e.value, e.key)));
  for (var kv in reversed.entries) {
    print(kv);
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:是的,反转地图可以简单地是:

var reversed = orig.map((k, v) => MapEntry(v, k));
Run Code Online (Sandbox Code Playgroud)

在 gitter 上向 Joe Conway 致敬。谢谢。


Mak*_*dir 9

还有另一种方法(类似于 G\xc3\xbcnter Z\xc3\xb6chbauer 答案):

\n\n
void main() {\n\n  Map currencies = {\n     "01": "USD",\n     "17": "GBP",\n     "33": "EUR"\n  };\n\n  MapEntry entry = currencies.entries.firstWhere((element) => element.value==\'GBP\', orElse: () => null);\n\n  if(entry != null){\n    print(\'key = ${entry.key}\');\n    print(\'value = ${entry.value}\');\n  }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此代码中,您将获得 MapEntry,其中包含键和值,而不是仅将键放在单独的变量中。它在某些代码中可能很有用。

\n


小智 6

Map map = {1: 'one', 2: 'two', 3: 'three'};

var key = map.keys.firstWhere((k) => map[k] == 'two', orElse: () => null);
print(key);
Run Code Online (Sandbox Code Playgroud)