【问题标题】:How to add a new pair to Map in Dart?如何在 Dart 中向 Map 添加新对?
【发布时间】:2019-05-23 07:41:13
【问题描述】:

在向地图添加新对时,我发现了以下错误。

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

我执行了以下代码。

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

someMap["c"] = 3;

我应该如何向地图中添加新的配对?

我也想知道如何使用Map.update

【问题讨论】:

  • 这段代码在方法中吗?您不能在顶级范围内执行分配或其他代码
  • 感谢您的评论。我不知道。它有效。
  • 类型转换来的时候dart太弱了。

标签: flutter dart key-pair fluttermap


【解决方案1】:

要在 Flutter 中声明您的地图,您可能需要final

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

那么,你的更新应该可以工作了:

someMap["c"] = 3;

最后,update 函数有两个参数需要传递,第一个是键,第二个是一个函数,它本身被赋予一个参数(现有值)。示例:

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

如果你在所有这些之后打印地图,你会得到:

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

【讨论】:

  • 感谢您的回复,但它不起作用,出现同样的错误。
  • 我在Widgetbuild 函数中测试了完全相同的代码,您将不得不在您的问题中添加更多信息。在这里阅读更多:stackoverflow.com/help/how-to-ask
  • 谢谢。我解决了这个问题。错误的原因是我在顶级范围内执行了代码,正如@jonah-williams 在我的问题的 cmets 中所说的那样。
【解决方案2】:

你可以在 Dart 中通过像这样指定一个新的键来添加一个新的对:

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

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

根据 cmets,它不适用于 OP 的原因是这需要在方法内部完成,而不是在顶层完成。

【讨论】:

    【解决方案3】:

    将新键/值作为映射添加到现有映射的另一种方法是,

    oldMap.addEntries(myMap.entries);
    

    这将使用myMap 的键/值更新oldMap

    【讨论】:

      【解决方案4】:

      有两种方法可以将项目(键值对)添加到 Map:

      1.使用方括号[]

      2.调用putIfAbsent()方法

      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)
      

      ; 输出:

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

      您可以使用addAll() 方法将另一个 Map 的所有键/值对添加到当前 Map。

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

      输出:

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

      【讨论】:

        【解决方案5】:
        Map<String, dynamic> someMap = {
          'id' : 10,
          'name' : 'Test Name'
        };
        someMethod(){
          someMap.addAll({
            'email' : 'test@gmail.com'
          });
        }
        printMap(){
          print(someMap);
        }
        

        确保您不能在声明正下方添加条目。

        【讨论】:

          【解决方案6】:

          我编写了这个实用程序:

          Map updateMap({
            /// Update a map with another map
            /// Example:
            ///   Map map1 = {'name': 'Omid', }
            ///   Map map2 = {'family': 'Raha', }
            ///   Map map = updateMap(data:map1, update:map2);
            /// Result:
            ///   map = {'name': 'Omid', 'family': 'Raha',}
            @required Map data,
            @required Map update,
          }) {
            if (update == null) return data;
            update.forEach((key, value) {
              data[key] = value;
            });
            return data;
          }
          

          例子:

          Map map1 = {'name': 'Omid', }
          Map map2 = {'family': 'Raha', }
          
          Map map = updateMap(data:map1, update:map2);
          
          print(map);
          
          {'name': 'Omid', 'family': 'Raha',}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多