在 Dart 中合并两个对象列表

Posted

技术标签:

【中文标题】在 Dart 中合并两个对象列表【英文标题】:Merge two lists of objects in Dart 【发布时间】:2021-09-04 12:03:51 【问题描述】:

我有具有参数名称和参数计数器的对象。这些对象存储在列表中。我列表中的某些项目具有重复的参数“名称”。我想删除列表中的重复项并将该重复项的计数器添加到重复对象参数中。

class Person 
Person(this.name, this.counter);
  String name;
  int counter;


List<Person> theList = [];

theList.add(Person(name:"Ben", counter: 2);
theList.add(Person(name:"Ben", counter: 5);

//I need a function that changes the List to show Ben with counter 7

【问题讨论】:

请提供Minimal, Reproducible Example 【参考方案1】:
class Person 
  final String name;
  int counter;
  Person(required this.name, required this.counter);


extension on List<Person> 
  void addPerson(required String name, required int counter) 
    if (isNotEmpty) 
      try 
        var person = firstWhere((p) => p.name == name);
        person.counter += counter;
       catch(e)  
        add(Person(name:name, counter: counter));
      
     else 
      add(Person(name:name, counter: counter));
    
  


void main() 
  var theList = <Person>[];

  theList.addPerson(name:"Lucho", counter: 4);
  theList.addPerson(name:"Ben", counter: 2);
  theList.addPerson(name:"Ben", counter: 5);  
  
  print(theList);
  print(theList.length);
  print("$theList[1].name - $theList[1].counter");  

结果:

[Instance of 'Person', Instance of 'Person']
2
Ben - 7

【讨论】:

【参考方案2】:

首先为Persons 列表定义一个类:

class PersonList
  List<Person> _personList = [];

  get personList
    return [..._personList];
  

  void addToList(Person person)
    for(int i=0; i<_personList.length; i++)
      if(_personList[i].name == person.name)
        _personList[i].counter = _personList[i].counter + person.counter;
        return;
      
    
    _personList.add(person);
    return;
  

然后,您可以创建它的新实例并将一些条目添加到列表中:

PersonList theList = new PersonList();
theList.addToList(Person(name:"Ben", counter: 2));
    print(theList.personList[0].counter);
    theList.addToList(Person(name:"Ben", counter: 5));
    print(theList.personList[0].counter);

请随意使用addToList 方法。

【讨论】:

以上是关于在 Dart 中合并两个对象列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dart 中合并两个列表?

如何访问 Dart 中的对象列表中的对象列表

如何在java中合并两个复杂对象

将 2 个不同对象的列表合并为一个组合对象

30分钟掌握Dart语言

Dart以交替方式组合两个列表