En langage Dart, comment obtenir les clés MAP par les valeurs ?
J'ai une carte comme ;
{
"01": "USD",
"17": "GBP",
"33": "EUR"
}
Et j'ai besoin d'utiliser des valeurs pour obtenir des clés. Comment dois-je faire ?
En langage Dart, comment obtenir les clés MAP par les valeurs ?
J'ai une carte comme ;
{
"01": "USD",
"17": "GBP",
"33": "EUR"
}
Et j'ai besoin d'utiliser des valeurs pour obtenir des clés. Comment dois-je faire ?
Si vous devez effectuer cette opération plus de quelques fois sur les mêmes données, vous devriez créer une carte inverse afin de pouvoir effectuer une simple recherche de clé au lieu de recherches linéaires répétées. Voici un exemple d'inversion d'une carte (il existe peut-être des moyens plus simples de le faire) :
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 : oui, inverser une carte peut simplement être :
var reversed = orig.map((k, v) => MapEntry(v, k));
Coup de chapeau à Joe Conway sur gitter. Merci.
Il existe une autre méthode (similaire à la réponse de Günter Zöchbauer) :
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}');
}
}
Dans ce code, vous obtenez MapEntry, qui contient la clé et la valeur, au lieu de seulement la clé dans une variable séparée. Cela peut être utile dans certains codes.
Si quelqu'un a encore besoin d'une solution, j'ai écrit une bibliothèque simple pour effectuer une recherche profonde (recherche à l'intérieur de cartes imbriquées) ou une recherche par valeur à l'intérieur d'une carte. Map
. L'utilisation est simple, car deepSearchByValue()
est une méthode d'extension, il vous suffit donc d'importer ma bibliothèque et d'appeler la méthode sur votre carte :
import 'package:deep_collection/deep_collection.dart';
void main() {
print({
"01": "USD",
"17": "GBP",
"33": "EUR",
}.deepSearchByValue((value) => value == 'USD'));
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.