【问题标题】:How to find the min and max values from a list in Dart?如何从 Dart 的列表中找到最小值和最大值?
【发布时间】:2020-12-02 05:43:06
【问题描述】:

我已经尝试了下面的代码 sn-p。但它会引发关于类型转换的错误。因为列表具有整数和双精度值的组合。但是 list.reduce(min) 只返回一个整数值。因此,您能否为这些问题提供解决方案,伙计们?提前致谢。

注意 -- 但是我从用户那里得到了唯一的动态列表

 final List<dynamic> y = [12, 12, 23.5, 2, 19, 1, 23, 16, 29.7, 32, 45, 68, 23, 21];
 List<num> yValues = y;
 num yMin = yValues.reduce(min);
 num yMax = yValues.reduce(max);

【问题讨论】:

    标签: dart


    【解决方案1】:

    您正在写列表的类型为List&lt;dynamic&gt;。由于minmax 仅适用于num 类型,我们需要将列表中的每个元素cast 转换为num,如下所示:

    import 'dart:math';
    
    void main() {
      final List<dynamic> y = <dynamic>[12, 12, 23.5, 2, 19, 1, 23, 16, 29.7, 32, 45, 68, 23, 21];
      final yMin = y.cast<num>().reduce(min);
      final yMax = y.cast<num>().reduce(max);
      print(yMin); // 1
      print(yMax); // 68
    }
    

    【讨论】:

    • 我的意思是如果他真的想添加类型,那么还不如将列表 List 比 List
    • 我猜他是从 JSON 解析或其他某种来源获得的列表。同样,问题是关于他已经得到了这个列表,它们是List&lt;dynamic&gt;
    【解决方案2】:

    我通常不建议使用 3rd 方包,但那些通用且来自受信任的开发人员的包是好的。其中之一是quiver

    ...
    import 'package:quiver/iterables.dart' as quiver;
    ...
    
    final y = [12, 12, 23.5, 2, 19, 1, 23, 16, 29.7, 32, 45, 68, 23, 21];
    num yMin = quiver.min(y);
    num yMax = quiver.max(y);
    
    

    【讨论】:

    • 在这种情况下,这个包比dart:math好多少?
    • 不是一个包,而是它的 min 函数:它在语义上找到集合的 min/max 元素。虽然使用 reduce 并传递数学的 min/max 基本上是 reduce 的重复。所以基本上它封装了寻找最小/最大元素的功能,而使用reduce你自己实现逻辑
    【解决方案3】:

    这应该可行:

    import 'dart:math';
    
    void main() {
      final y = [12, 12, 23.5, 2, 19, 1, 23, 16, 29.7, 32, 45, 68, 23, 21, 69.1];
      var yMin = y.reduce(min);
      var yMax = y.reduce(max);
    }
    

    【讨论】:

    猜你喜欢
    • 2020-03-08
    • 2019-12-09
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多