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

91zkwejq  于 2023-03-21  发布在  其他
关注(0)|答案(4)|浏览(171)

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

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; });
wnrlj8wa

wnrlj8wa1#

试试这个:

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);

它的作用是:

  • 循环遍历列表元素
  • 如果您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);

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

gcuhipw9

gcuhipw92#

计算项目在List中出现次数的最短方法
项目列表。项目计数等于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);
7bsow1i6

7bsow1i63#

对贴图使用fold

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

var counts = elements.fold<Map<String, int>>({}, (map, element) {
  map[element] = (map[element] ?? 0) + 1;
  return map;
});

print(counts);

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

2ekbmq32

2ekbmq324#

最后,这一切都归结为FOR循环

void main() {
  final elements = [
    "a",
    "b",
    "c",
    "d",
    "e",
    "a",
    "b",
    "c",
    "f",
    "g",
    "h",
    "h",
    "h",
    "e",
    "a"
  ];

  Map resp = {};
  for (var items in elements) {
    int count = 0;
    for (var val in elements) {
      if (items == val) count++;
      resp[items] = count;
    }
  }
  print(resp);
}

相关问题