flutter 如何获得所有列表中的总项目

chhqkbe1  于 2022-12-30  发布在  Flutter
关注(0)|答案(4)|浏览(173)

我在Flutter中得到了这个列表:

List<dynamic> days = [];

打印它会得到以下结果:

[[1, 3, 4, 6], [1, 2, 3]]

现在我想得到这个列表中的项目总数。最好的方法是什么?
我试过这个,但它不工作:

print(days.sum);

我希望获得所有列表中的项目总数。(1,3,4,6 + 1,2,3)=总计:7个项目。
这可能吗?

2sbarzqh

2sbarzqh1#

试试这个

List<dynamic> days = [[1, 3, 4, 6], [1, 2, 3]];
int length = 0 ;
for (var item in days ){
length = length + int.parse ('${ item.length ?? 0}');
} 
print ('Total Length : $length  ');
b1payxdu

b1payxdu2#

void main() {
  List<dynamic> list = [1, 2, [3, 4, [5, 6]], 7, 8];
  int count = countElements(list);
  print(count); 
}    

int countElements(List<dynamic> list) {
  int count = 0;
  for (var element in list) {
    if (element is List) {
      count += countElements(element);
    } else {
      count++;
    }
  }
  return count;
}

这是一个递归函数。这个例子打印“8”。

goqiplq2

goqiplq23#

考虑到您使用List<dynamic>作为days的类型,您可以编写

print(days.whereType<List>().flattened.length);

如果days声明为List<List>并以like开始

List<List> days = [];

你可以把它缩短为

print(days.flattened.length);

flatted是collection包的一部分,因此您需要添加它并导入它,如下所示:

import 'package:collection/collection.dart';

如果你不想使用这个包,你可以自己复制它的实现,并将它添加到你的代码中:

/// Extensions on iterables whose elements are also iterables.
extension IterableIterableExtension<T> on Iterable<Iterable<T>> {
  /// The sequential elements of each iterable in this iterable.
  ///
  /// Iterates the elements of this iterable.
  /// For each one, which is itself an iterable,
  /// all the elements of that are emitted
  /// on the returned iterable, before moving on to the next element.
  Iterable<T> get flattened sync* {
    for (var elements in this) {
      yield* elements;
    }
  }
}
jucafojl

jucafojl4#

你可以试着用折叠法。

List<dynamic> days = [1, 2, 3, 4 , 6];
  
  var sumDays = days.fold<dynamic>(0, (prev, element) => prev + element);
  
  print(sumDays);

在打印时返回16。

相关问题