У меня есть итератор, содержащий несколько пар значений ключа. напримерScala - подсчитать количество вхождений каждого ключа в Iterator
(жень, хуг) (Ken, ZXY) (жень, ASD) (Ken, ASDF)
Результаты должны быть
(жень, 2) (ken, 2)
Как использовать функцию count (или любую другую) для подсчета количества вхождений каждой клавиши в итераторе этой конкретной коллекции.
Edit: Коллекция что итератор represend в моем потребительной случае имеет большое количество записей, возможно в диапазоне миллионов, нет мне нужен самый эффективный (меньше времени сложности) способ сделать это. Я узнал, что метод count был довольно быстрым и что его можно каким-то образом использовать для получения результата желания.
Peter, см. Мой ответ ниже. Использование 'groupBy' для получения списков и подсчет каждого из этих списков по' length' будет довольно неэффективным. –
@JasonLenderman, "довольно неэффективно"? Это почти наверняка не повлияет на огромное, подавляющее большинство случаев. Микрооптимизации просто глупы, пока вы их не очень нуждаетесь (что очень редко). ** Plus **, если вы действительно обеспокоены этой крошечной, крошечной долей эффективности, вам, вероятно, следует переписать * ваш * ответ, чтобы не использовать 'foldLeft'; в конце концов, цикл 'while' всегда будет намного более эффективным ... – dhg
@dhg, метод' groupBy' создает новый «Список» для каждого ключа, и каждый из этих «списков» создается в памяти. Кроме того, для вычисления длины требуется дополнительный обход для каждого списка.Если количество различных ключей, которые повторяются (и количество раз, когда они происходят), являются небольшими, то это, вероятно, не большая проблема, но для некоторых приложений это может быть очень плохо. Что касается использования цикла while, я этого не делал, потому что считаю, что это микро-оптимизация. Зачем? Потому что это приведет только к * постоянному коэффициенту * улучшения * независимо * от приложения или данных. –