Dart 映射,如何根据其键 id 替换 list<map> 中的特定键值?

Posted

技术标签:

【中文标题】Dart 映射,如何根据其键 id 替换 list<map> 中的特定键值?【英文标题】:Dart maps, how to replace specific key value in a list<map> based on its key id? 【发布时间】:2021-03-20 14:20:19 【问题描述】:
void main() 
  List<Map<String, dynamic>> products = [
    'id': 24, 'time': '2019-11-24 00:00:00.000',
    'id': 36, 'time': '2019-11-23 00:00:00.000',
    'id': 48, 'time': '2019-11-24 00:00:00.000',
  ];

在上面的代码中,我想将“时间”条目“2019-11-24 00:00:00.000”替换为“id”48 的“2019-10-26 00:00:00.000”。

【问题讨论】:

如果 id 是唯一的,则说明数据结构错误。它应该是一个以 id 为键的 Map。替换它将是一个简单的任务。遍历列表以查找特定列表几乎总是一种代码味道。 【参考方案1】:

你可以试试这样的:

   products.where((x) => x["id"] == 48).first["time"] = "2019-10-26 00:00:00.000";

【讨论】:

@Akif,你的回答非常有用。 谢谢你,@Ketan Ramteke :)【参考方案2】:

这是另一种方法:

    void main()  
      List<Map<String, dynamic>> products = [
        'id': 24, 'time': '2019-11-24 00:00:00.000',
        'id': 36, 'time': '2019-11-23 00:00:00.000',
        'id': 48, 'time': '2019-11-24 00:00:00.000',
      ];
      
       products = products.map((product)
        if(product["id"] == 48)
          return ...product, 'time': '2019-10-26 00:00:00.000';
        
         return product;
      ).toList();
      
      print(products.toString());
    

【讨论】:

谢谢亲爱的,“返回 ...product, 'time': '2019-10-26 00:00:00.000';”为我工作:) 很高兴它有帮助,编码愉快。

以上是关于Dart 映射,如何根据其键 id 替换 list<map> 中的特定键值?的主要内容,如果未能解决你的问题,请参考以下文章

Dart:映射列表(list.map)

打字稿:如何制作接受对象的类型,其键匹配通用但所有值都是值参数的映射函数

根据其键的子集过滤地图的元素,而无需遍历整个事物

dart - 如果包含在List中,如何检查id / name?

根据字典映射表替换列表中的元素

如何在 Dart 中仅使用级联或链式调用干净地映射/排序/折叠/排序/扩展?