【问题标题】:flutter - how do calculate average the data in list?颤振 - 如何计算列表中数据的平均值?
【发布时间】:2019-06-23 18:36:57
【问题描述】:

我有一个关于用户食物的List<Comment>。 它看起来像这样:

[
    {userId: 1,
     rating: 4.5
    },
    {userId: 2,
     rating: 4.0
    },
    {userId: 3,
     rating: 3.5
    },
    {userId: 4,
     rating: 3.0
    }

   ...
];

我想获得平均评分。 AVERAGE = Number of ratings : total user,如何在 dart 中应用这个?

【问题讨论】:

    标签: list dart flutter


    【解决方案1】:
      var values = [
        {'userId': 1, 'rating': 4.5},
        {'userId': 2, 'rating': 4.0},
        {'userId': 3, 'rating': 3.5},
        {'userId': 4, 'rating': 3.0}
      ];
    
      var result = values.map((m) => m['rating']).reduce((a, b) => a + b) / values.length;
      print(result);
    

    【讨论】:

    • 在 json 相关的问题上没有人能打败你。
    • 嗨@Günter Zöchbauer,如果我想从最高评分到最低评分对列表进行排序怎么办?
    • 仅在手机上。应该有一个关于如何按值对地图进行排序的问题
    • 这个答案已经过时了。在这里查看更好的解决方案stackoverflow.com/a/69660580/8539278
    【解决方案2】:

    2021 年 dart 具有来自collection 包的内置average 方法,可用于Iterable

    import 'package:collection/collection.dart';
    
    void main() {
     var values = [
        {'userId': 1, 'rating': 4.5},
        {'userId': 2, 'rating': 4.0},
        {'userId': 3, 'rating': 3.5},
        {'userId': 4, 'rating': 3.0}
      ];
    
      var result = values.map((m) => m['rating']!).average; 
    
      print(result); // prints 3.75
    }
    
    

    您可能还对同一包中的 .sum 方法感兴趣。

    【讨论】:

      【解决方案3】:

      我通过使用 fold 函数将值相加然后除以总数来做到这一点。这是一个例子:

      var values = [
          {'userId': 1, 'rating': 4.5},
          {'userId': 2, 'rating': 4.0},
          {'userId': 3, 'rating': 3.5},
          {'userId': 4, 'rating': 3.0}
      ];
      
      List<double> ratings = values.map((e) => e.price!).toList();
      double sum = ratings.fold(0, (p, c) => p + c);
      if (sum > 0) {
         double average = sum / ratings.length;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多