【问题标题】:Dart - General Summation Function For 'double', 'int', and 'num' Number TypesDart - 'double'、'int' 和 'num' 数字类型的通用求和函数
【发布时间】:2021-08-17 04:34:53
【问题描述】:
mySumFunction(myIntList) = 
mySumFunction(myDoubleList) = 
mySumFunction(myNumList) = 

单个函数可以计算以上所有这些吗?大多数可以接受num or List<num> 作为输入的函数也可以分别接受double & intList<double> & List<int> 作为输入。涉及.reduce() 的函数似乎是一些例外。

sumList(List<num> temp) {
  return (temp.reduce((value, element) => (value + element)));
} //Only works with num type variables

【问题讨论】:

  • 这里reduce 的问题是它不能从它处理的值返回不同类型的值。

标签: list dart types iteration


【解决方案1】:

为 Dart 2.13 修复的代码:

// @dart=2.13
T sumList<T extends num>(List<T> temp) {
  var result = temp.reduce((value, element) => (value + element) as T);
  return result;
}


void main() {
  print(sumList<double>([2,3,4.5,5,6])); 
}

结果:

20.5

【讨论】:

  • 错误:无法从返回类型为“T”的函数返回“num”类型的值。 Dart SDK 版本:2.13.0。不过还是谢谢
  • 为 Dart 2.13 修复的代码
【解决方案2】:

除非您专门寻找使用 reduce 的解决方案,否则可以使用 forEach 计算函数中 nums ints 或 doubles 的总和。

sum(List<num> list) {
  var total = 0;
  for (var x in list) {
    total += x;
  }
  return total;
}

这方面的简写是fold 函数,它几乎是带有初始值的reduce,它解决了类型问题。以下函数适用于 nums doubles 或 ints。

sumByFolding(List<num> list) {
   return list.fold(0, (prev, element) => prev + element); 
}

与 reduce 函数不同,折叠也可以安全地用于空集合。

【讨论】:

    【解决方案3】:

    另一种选择:

    sumList(List<num> temp) {
        return([...temp].reduce((value, element) => value + element));
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2021-03-08
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多