在 Dart 中合并两个对象列表
Merge two lists of objects in Dart
我的对象有一个参数名称和一个参数计数器。这些对象存储在列表中。我列表中的某些项目具有重复的参数“名称”。我想删除列表中的重复项并将该重复项的计数器添加到 duplicate-objects 参数。
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
首先为 Person
的列表定义一个 class:
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
方法。
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
我的对象有一个参数名称和一个参数计数器。这些对象存储在列表中。我列表中的某些项目具有重复的参数“名称”。我想删除列表中的重复项并将该重复项的计数器添加到 duplicate-objects 参数。
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
首先为 Person
的列表定义一个 class:
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
方法。
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