如何计算列表中项目的出现

时间:2019-04-08 18:46:41

标签: list dart

我是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; });

3 个答案:

答案 0 :(得分:3)

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

物品清单。计数项目等于 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);

对象列表。计数对象,其属性年龄等于 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);

答案 1 :(得分: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);

在所有编程语言中都有许多方法可以实现这一目标!

答案 2 :(得分:-2)

import 'package:queries/collections.dart';

void main() {
  var elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
  var count1 = Collection(elements).count((e) => e == 'a');
  print('Count of "a": $count1');
  var codeUnit = 'e'.codeUnitAt(0);
  var count2 = Collection(elements).count((e) => e.codeUnitAt(0) >= codeUnit);
  print('Count of chars >= "e": $count2');
}

结果:

Count of "a": 3 Count of chars >= "e": 7