【问题标题】:How to count items' occurence in a List如何计算列表中项目的出现次数
【发布时间】:2019-04-08 18:46:40
【问题描述】:

我是 Dart 的新手。目前我有一个重复项目列表,我想计算它们的出现并将其存储在地图中。

var elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];

我想要这样的结果:

{
  "a": 3,
  "b": 2,
  "c": 2,
  "d": 2,
  "e": 2,
  "f": 1,
  "g": 1,
  "h": 3
}

我做了一些研究,找到了一个 JavaScript 解决方案,但我不知道如何将它翻译成 Dart。

var counts = {};
your_array.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });

【问题讨论】:

    标签: list dart


    【解决方案1】:

    玩这个:

      var elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e"];
      var map = Map();
    
      elements.forEach((element) {
        if(!map.containsKey(element)) {
          map[element] = 1;
        } else {
          map[element] +=1;
        }
      });
    
      print(map);
    

    这是做什么的:

    • 循环遍历列表元素
    • 如果您的地图没有将列表元素设置为键,则创建值为 1 的该元素
    • 否则,如果元素已存在,则将现有键值加 1

    或者,如果你喜欢语法糖和一种衬里,试试这个:

      var elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e"];
      var map = Map();
    
      elements.forEach((x) => map[x] = !map.containsKey(x) ? (1) : (map[x] + 1));
    
      print(map);
    

    在所有编程语言中都有很多方法可以实现这一点!

    【讨论】:

    • 感谢您的帮助!我想知道是否可以像在我的 JS 示例中那样使用 dart => 表示法。
    • 是的,你可以,我用另一个例子更新了答案,它使用 => 和短 if / else using ?作为语法糖。
    • 我认为更多的应该在地图上使用“更新”方法。可以编写相同的代码,我认为它更干净:elements.forEach((e) => map.update(e, (x) => x + 1, ifAbsent: () => 1));
    • 您也可以使用:for (var x in elements) map[x] = (map[x] ?? 0) + 1;更新地图。
    • Lrn:这也是一个很好的干净例子! :)
    【解决方案2】:

    计算列表中项目出现次数的更短方法

    项目列表。计数项目等于 1。

    List<int> lst = [0,1,1,1,0,8,8,9,1,0];
    int res = lst.map((element) => element == 1 ? 1 : 0).reduce((value, element) => value + element);
    

    对象列表。统计对象,其属性age等于1。

    class Person {
       int age;
       
       Person(this.age);
    }
    
    List<Person> lst2 = [Person(1), Person(0), Person(1), Person(0)];
    int res2 = lst2.map((element) => element.age == 1 ? 1 : 0).reduce((value, element) => value + element);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多