How to get Map keys by values in Dart?
var usdKey = curr.keys.firstWhere( (k) => curr[k] == 'USD', orElse: () => null);
If you will be doing this more than a few times on the same data, you should create an inverse map so that you can perform simple key lookup instead of repeated linear searches. Here's an example of reversing a map (there may be easier ways to do this):
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); }}
Edit: yes, reversing a map can simply be:
var reversed = orig.map((k, v) => MapEntry(v, k));
Tip of the hat to Joe Conway on gitter. Thanks.
There is another one method (similar to Günter Zöchbauer answer):
void main() { Map currencies = { "01": "USD", "17": "GBP", "33": "EUR" }; MapEntry entry = currencies.entries.firstWhere((element) => element.value=='GBP', orElse: () => null); if(entry != null){ print('key = ${entry.key}'); print('value = ${entry.value}'); }}
In this code, you get MapEntry, which contains key and value, instead only key in a separate variable. It can be useful in some code.