Как подсчитать вхождение предметов в список - PullRequest
2 голосов
/ 08 апреля 2019

Я новичок в Дарт. В настоящее время у меня есть список дубликатов, и я хотел бы подсчитать их количество и сохранить его на карте.

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

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Поиграйте с этим:

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

Есть много способов добиться этого на всех языках программирования!

0 голосов
/ 09 апреля 2019
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...