#list #algorithm #dart #grouping
#Список #алгоритм #dart #группировка
Вопрос:
У меня есть эти классы:
class Car {
String carId;
int yearOfManufacture;
//constructor, fromJson, toJson ...
}
class CarsByYears {
int yearOfManufacture;
List<Car> carList;
//constructor, fromJson, toJson ...
}
И мне нужно сгенерировать подобную структуру данных только на основе данного списка автомобилей:
List<CarsByYears>
Итак, я получаю List<Car>
список, и мне нужно создать List<CarsByYears>
из него список. Итак, мне нужно сгруппировать автомобили по годам.
Например, у меня есть List<Car>
список, который содержит эти:
Car(1, 1990)
Car(2, 2001)
Car(3, 1990)
Мне нужно создать List<CarsByYears>
, который содержит 2 CarsByYears
объекта:
Первый из них выглядит так: yearOfManufacture = 1990
и carList
содержит 1-й и 3-й объект car, а другой CarsByYears
содержит 2-й объект Car в своем списке, и yearOfManufacture = 2001
Как я могу это сделать?
Комментарии:
1. Совет: создайте карту <int, CarsByYears>, индексируемую по годам, или, что лучше, используйте карту<int, List<Car>> .
Ответ №1:
Вы можете использовать groupBy
функцию, предоставляемую пакетом collection (которая создает карту из списка, просматривая его, используя общее значение в качестве ключа), а затем сопоставлять Map
записи.
class Car {
final String carId;
final int yearOfManufacture;
Car(this.carId, this.yearOfManufacture);
@override
String toString() => 'Car($carId)';
// Use your constructor and methods
}
class CarsByYears {
final int yearOfManufacture;
final List<Car> carList;
CarsByYears(this.yearOfManufacture, this.carList);
@override
String toString() => 'Year: $yearOfManufacture, Cars: $carList';
// Use your constructor and methods
}
void main() {
var cars = [
Car('1', 2000),
Car('2', 2002),
Car('3', 2000),
Car('4', 2002),
Car('1', 2005)
];
var carsByYear = groupBy<Car, int>(cars, (e) => e.yearOfManufacture)
.entries
.map((e) => CarsByYears(e.key, e.value))
.toList();
print(carsByYear); //Output: [Year: 2000, Cars: [Car(1), Car(3)], Year: 2002, Cars: [Car(2), Car(4)], Year: 2005, Cars: [Car(1)]]
}