Flutter 整数列表的基本操作

Flutter 整数列表的基本操作,flutter,dart,Flutter,Dart,我有一个整数列表: var times = [ 1573613134, 1573623934, 1573631134, 1573659934, 1573746334, 1573731934, 1573764334, 1573789534, 1573847134, 1573933534, 1573893934, 1573980334, 1574153134, 1574178334 ]; 我想查看此列表中的值是否小于指定的整数 var sta

我有一个整数列表:

var times = [
  1573613134,
  1573623934,
  1573631134,
  1573659934,
  1573746334,
  1573731934,
  1573764334,
  1573789534,
  1573847134,
  1573933534,
  1573893934,
  1573980334,
  1574153134,
  1574178334
];
我想查看此列表中的值是否小于指定的整数

var staticTime = [1573764334];
简单但耗时的解决方案是使用for循环并将列表中的每个值与
staticTime
进行比较


Dart是否包含对值列表运行基本不等式操作的内置方法?

有内置的
every()
函数

var allSmaller = times.every((time) => time > staticTime);

有内置的
every()
函数

var allSmaller = times.every((time) => time > staticTime);

如果您想知道是否有小于staticTime的值,请使用:

bool hasAnySmaller = times.any((time)=> time<staticTime);

bool hasanysizer=times.any((time)=>timetime如果您想知道是否有任何值小于staticTime,请使用:

bool hasAnySmaller = times.any((time)=> time<staticTime);

bool hasanysimer=times.any((time)=>timetime您是否尝试过不同的方法来比较它们的速度?答案可能会让您感到惊讶。以这个快速基准为例:

最终值=;
void withForLoop(){
最终开始=DateTime.now();
最终结果=[];
对于(int i=0;ii<500000)。toList();
final end=DateTime.now();
打印('withWhere方法持续时间:${end.difference(start)}');
}
使用长度为1000000的
值运行此脚本会在我的计算机上导致以下时间:

withForLoop method duration: 0:00:00.125000
withForEachLoop method duration: 0:00:00.129000
withWhere method duration: 0:00:00.470000
由此可以推断出几件事:

  • 常规for循环完成得最快
  • 基于迭代器的“for-each”循环只比for循环稍微慢一点(慢3.2%)
  • 基于生成器的
    ,其中
    方法是迄今为止速度最慢的(慢276%)
  • 考虑到样本量,这三种方法的完成速度都非常快,特别是考虑到执行时间的大部分可能是由于
    add
    调用导致
    结果
    列表的大小调整和重新分配造成的(其中
    方法在显示的代码中没有明确执行此操作,但它确实在内部执行)
  • 生成器方法(例如,
    map
    where
    reduce
    等)之所以好是因为它们方便,而不是因为它们的速度。就原始性能而言,bog循环标准几乎总是最快的(忽略某些低级语言中可能出现的一些相当技术性的技巧,其中大部分无法在Dart中完成)。也就是说,任何尝试都需要花费大量的时间,而Dart中的任何应用程序都可能无法处理接近如此大的数据集。对于大小更合理的数据集,上述任何尝试都可能对y来说足够快我们的目的

    如果你从这个答案中学到了什么,希望是这两件事:

  • 不要过早地批评某些模式的性能,除非你自己对它们进行了基准测试(通常情况下,你的假设可能是错误的)
  • 不要担心那些本来就快得离谱的东西的性能。(在这之前,程序的其他部分将很早就出现瓶颈。)

  • (如果您想自己尝试上面的代码,)

    您是否尝试过不同的方法来比较它们的速度?答案可能会让您感到惊讶。以这个快速基准测试为例:

    最终值=;
    void withForLoop(){
    最终开始=DateTime.now();
    最终结果=[];
    对于(int i=0;ii<500000)。toList();
    final end=DateTime.now();
    打印('withWhere方法持续时间:${end.difference(start)}');
    }
    
    使用长度为1000000的
    值运行此脚本会在我的计算机上导致以下时间:

    withForLoop method duration: 0:00:00.125000
    withForEachLoop method duration: 0:00:00.129000
    withWhere method duration: 0:00:00.470000
    
    由此可以推断出几件事:

  • 常规for循环完成得最快
  • 基于迭代器的“for-each”循环只比for循环稍微慢一点(慢3.2%)
  • 基于生成器的
    ,其中
    方法是迄今为止速度最慢的(慢276%)
  • 考虑到样本量,这三种方法的完成速度都非常快,特别是考虑到执行时间的大部分可能是由于
    add
    调用导致
    结果
    列表的大小调整和重新分配造成的(其中
    方法在显示的代码中没有明确执行此操作,但它确实在内部执行)
  • 生成器方法(例如,
    map
    where
    reduce
    等)之所以好是因为它们方便,而不是因为它们的速度。就原始性能而言,bog循环标准几乎总是最快的(忽略某些低级语言中可能出现的一些相当技术性的技巧,其中大部分无法在Dart中完成).话虽如此,任何尝试都需要花费大量的时间,而Dart中的任何应用程序都很可能不会处理接近如此大的数据集。对于