Flutter / Dart как объединить значения в списке карт

#list #flutter #dart

#Список #flutter #dart

Вопрос:

У меня есть следующий список карт:

 [
   {
      "id":1,
      "asset_id":"name1",
      "asset_price":100.00,
      "asset_date":"09-09-09"
   },
   {
      "id":2,
      "asset_id":"name2",
      "asset_price":50.00,
      "asset_date":"10-09-09"
   },
   {
      "id":3,
      "asset_id":"name1",
      "asset_price":100.00,
      "asset_date":"11-09-09"
   }
]
  

Как я могу создать новый список, который объединяет дубликаты asset_id и суммирует цену, как показано ниже:

 [
   {
      "id":1,
      "asset_id":"name1",
      "asset_price":200.00,
      "asset_date":"09-09-09"
   },
   {
      "id":2,
      "asset_id":"name2",
      "asset_price":50.00,
      "asset_date":"10-09-09"
   }
]
  

Класс

   int id;
  String assetId;
  String assetName;
  String assetSymbol;
  String assetImage;
  double assetAmount;
  String assetCurrency;
  double assetPrice;
  String assetDate;

  Asset(
      {this.id,
      this.assetId,
      this.assetName,
      this.assetSymbol,
      this.assetImage,
      this.assetAmount,
      this.assetCurrency,
      this.assetPrice,
      this.assetDate});

  Map<String, dynamic> toMapWithoutId() {
    final map = new Map<String, dynamic>();
    map["id"] = id;
    map["asset_id"] = assetId;
    map["asset_name"] = assetName;
    map["asset_symbol"] = assetSymbol;
    map["asset_image"] = assetImage;
    map["asset_amount"] = assetAmount;
    map["asset_currency"] = assetCurrency;
    map["asset_price"] = assetPrice;
    map["asset_date"] = assetDate;
    return map;
  }

  Map<String, dynamic> toMap() {
    final map = new Map<String, dynamic>();
    map["id"] = id;
    map["asset_id"] = assetId;
    map["asset_name"] = assetName;
    map["asset_symbol"] = assetSymbol;
    map["asset_image"] = assetImage;
    map["asset_amount"] = assetAmount;
    map["asset_currency"] = assetCurrency;
    map["asset_price"] = assetPrice;
    map["asset_date"] = assetDate;
    return map;
  }

  //to be used when converting the row into object
  factory Asset.fromMap(Map<String, dynamic> data) => new Asset(
      id: data["id"],
      assetId: data["asset_id"],
      assetName: data["asset_name"],
      assetSymbol: data["asset_symbol"],
      assetImage: data["asset_image"],
      assetAmount: data["asset_amount"],
      assetCurrency: data["asset_currency"],
      assetPrice: data["asset_price"],
      assetDate: data["asset_date"]);
}
  

Комментарии:

1. Что должно id быть в первой записи? Я вижу, что вы удалили его в своем примере, но я не уверен, что это то, чего вы хотите? Или их следует id удалить во второй записи в примере?

2. Прошу прощения, опечатка с моей стороны. Я хотел бы сохранить самый ранний идентификатор объединенного

3. Будете ли вы создавать объекты из данных? Если да, можете ли вы поделиться своим классом? Итак, я могу дать вам точное решение.

4. Привет, Эсен, добавлена информация о классе

5. Я сократил класс для простоты