首页 > 解决方案 > Dart 在嵌套数据类上使用折叠来获取计数总和

问题描述

在这里我有多个嵌套类数据,我想得到总和SelectedProductServices.count

我的数据类开始于OrderStructure其中有一个列表,SelectedProducts并且它们每个都有SelectedProductServices哪些计数在这里。现在我该如何使用foldreduce获取它们的总和?

例如:

order.products.map((p)=>p.services.fold(0,(a,b)=>a!+b))

应该返回600

我的代码:

void main() {
     OrderStructure order = OrderStructure('test',<SelectedProducts>[
      SelectedProducts(
          1, <SelectedProductServices>[
        const SelectedProductServices(1, 100, 1),
        const SelectedProductServices(1, 500, 1),
      ]
      )
    ]);
  
    getSum();
}

void getSum(){
   return order.products.map((p)=>p.services.fold(0,(a,b)=>a!+b));
}

class OrderStructure {
  final String title;
  final List<SelectedProducts> products;

  const OrderStructure(this.title, this.products);
}

class SelectedProducts {
  final int id;
  final List<SelectedProductServices> services;

  SelectedProducts(this.id, this.services);
  @override
  bool operator ==(other) => other is SelectedProducts && other.id == id;

  @override
  int get hashCode => id.hashCode;
}

class SelectedProductServices {
  final int id;
  final int count;
  final int cost;

  const SelectedProductServices(this.id, this.count, this.cost);
}

标签: flutterdart

解决方案


由于您有嵌套列表,因此您必须折叠两次才能获得单个值:

int getSum(){
   int sum(int a, SelectedProductServices s) => a + s.count;
   return order.products.map((p) => p.services.fold(0, sum)).fold(0, (a,b) => a + b);
}

推荐阅读