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)
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 致敬。谢谢。
还有另一种方法(类似于 G\xc3\xbcnter Z\xc3\xb6chbauer 答案):
\n\nvoid 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}\nRun 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)