120 votes

Comment ajouter une nouvelle paire à la carte en Dart ?

J'ai rencontré les erreurs suivantes lors de l'ajout d'une nouvelle paire à une carte.

  • Variables must be declared using the keywords const, final, var, or a type name
  • Expected to find;
  • the name someMap is already defined

J'ai exécuté le code suivant.

Map<String, int> someMap = {
  "a": 1,
  "b": 2,
};

someMap["c"] = 3;

Comment ajouter une nouvelle paire à la carte ?

J'aimerais aussi savoir comment utiliser Map.update .

3 votes

Ce code est-il dans une méthode ? Les affectations ou tout autre code ne peuvent pas être exécutés dans la portée de niveau supérieur.

0 votes

Je vous remercie pour votre commentaire. Je ne le savais pas. Ça marche.

1 votes

Dart est si faible quand la conversion de type arrive.

189voto

Tyler Points 1726

Pour déclarer votre carte dans Flutter, vous voulez probablement final :

final Map<String, int> someMap = {
  "a": 1,
  "b": 2,
};

Ensuite, votre mise à jour devrait fonctionner :

someMap["c"] = 3;

Enfin, le update a deux paramètres que vous devez passer, le premier est la clé, et le second est une fonction qui reçoit elle-même un paramètre (la valeur existante). Exemple :

someMap.update("a", (value) => value + 100);

Si vous imprimez la carte après tout ça, vous obtiendrez :

{a: 101, b: 2, c: 3}

1 votes

Merci pour votre réponse, mais cela ne fonctionne pas et les mêmes erreurs se produisent.

0 votes

J'ai testé exactement le même code dans le build fonction de mon Widget vous allez devoir ajouter des informations supplémentaires à votre question. Plus d'informations ici : stackoverflow.com/help/how-to-ask

0 votes

Merci. J'ai résolu ce problème. La cause de l'erreur était que j'ai exécuté le code dans la portée de niveau supérieur, comme @jonah-williams l'a dit dans les commentaires de ma question.

56voto

Suragch Points 197

Vous pouvez ajouter une nouvelle paire à une Map dans Dart en spécifiant une nouvelle clé comme ceci :

Map<String, int> map = {
  'a': 1,
  'b': 2,
};

map['c'] = 3;  // {a: 1, b: 2, c: 3}

Selon les commentaires, la raison pour laquelle cela n'a pas fonctionné pour le PO est que cela doit être fait à l'intérieur d'une méthode, et non au niveau supérieur.

15voto

Paresh Mangukiya Points 13942

Il existe deux façons d'ajouter un élément (paire clé-valeur) à une carte :

1.utiliser des crochets []

2.appel putIfAbsent() méthode

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

map[3] = 'three';
print(map);

var threeValue = map.putIfAbsent(3, () => 'THREE');
print(map);
print(threeValue); // the value associated to key, if there is one

map.putIfAbsent(4, () => 'four');
print(map)

; Sortie :

{1: one, 2: two, 3: three}
{1: one, 2: two, 3: three}
three
{1: one, 2: two, 3: three, 4: four}

Vous pouvez ajouter toutes les paires clé/valeur d'une autre Map à la Map actuelle en utilisant la fonction addAll() méthode.

Map map = {1: 'one', 2: 'two'};
map.addAll({3: 'three', 4: 'four', 5: 'five'});
print(map);

Sortie :

{1: one, 2: two, 3: three, 4: four, 5: five}

12voto

Abdul Qadir Points 103
Map<String, dynamic> someMap = {
  'id' : 10,
  'name' : 'Test Name'
};
someMethod(){
  someMap.addAll({
    'email' : 'test@gmail.com'
  });
}
printMap(){
  print(someMap);
}

assurez-vous que vous ne pouvez pas ajouter des entrées juste en dessous de la déclaration.

5voto

RopAli Munshi Points 1770

Une autre façon d'ajouter une nouvelle clé/valeur en tant que carte à une carte existante est la suivante,

oldMap.addEntries(myMap.entries);

Cela permettra de mettre à jour le oldMap avec une clé/valeur de myMap ;

Prograide.com

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.

Powered by:

X