В F # есть способ сопоставить, например, [2;2;2;2;5;5;5;7;7]
, с [4,3,2]
без рекурсии и без изменения? Я просмотрел элементы Array и List и нашел «Уменьшить», но это, похоже, не помогает.F # подсчет повторений в списке
ответ
Попробуйте это:
[2;2;2;2;5;5;5;7;7] |> Seq.groupBy id |> Seq.map (snd >> Seq.length)
Seq.groupBy id
собирает список на группы одинаковых элементов - с помощью функции идентичности id
означает, что элементы последовательности используются непосредственно в качестве «ключей» для проверки равенства. Это дает нам последовательность исходных элементов спаренных с повторениями:
seq [(2, seq [2; 2; 2; 2]); (5, seq [5; 5; 5]); (7, seq [7; 7])]
Тогда для каждого из внутренних последовательностей, мы используем snd
только получить последовательность повторов, и Seq.length
, чтобы получить его длину. >>
- оператор композиции, который применяет первую функцию, а затем вторую.
Brilliant - спасибо! –
Вы можете реализовать его быстро, используя Seq.countBy
. Использование F # интерактивным, он выглядит следующим образом:
> [2;2;2;2;5;5;5;7;7] |> Seq.countBy id;;
val it : seq<int * int> = seq [(2, 4); (5, 3); (7, 2)]
Если вы хотите только счетчики (а не значения, которые повторяются), вы можете просто труба результат в Seq.map
:
> [2;2;2;2;5;5;5;7;7] |> Seq.countBy id |> Seq.map snd;;
val it : seq<int> = seq [4; 3; 2]
Обратите внимание, что вы можете реализовать это с помощью Seq.groupBy
, но Seq.countBy
намного эффективнее: Seq.groupBy
потребляет больше памяти, потому что он должен хранить все группы, тогда как Seq.countBy
хранит только один int
(счетчик) для каждой клавиши в последовательности.
- 1. Подсчет повторений набора символов
- 2. Подсчет количества повторений определенного значения в AngularJS
- 3. Подсчет количества повторений дважды в строке
- 4. Подсчет повторений для групп в отчете ssrs
- 5. Подсчет количества повторений значения в хэшировании
- 6. Поиск в пересечении прямоугольника в списке повторений
- 7. Подсчет элементов в списке списков
- 8. Как получить счетчик повторений в списке?
- 9. Удалить список повторений в списке SQL
- 10. подсчет в связанном списке
- 11. Подсчет линий в списке
- 12. подсчет элементов в списке
- 13. Подсчет строки в списке
- 14. Подсчет групп в списке
- 15. Подсчет дубликатов в списке
- 16. Подсчет элементов в списке
- 17. Подсчет чисел в списке
- 18. F # в списке элементов
- 19. F #: Сгенерируйте подсчет количества слов
- 20. F # - AsyncSeq - как вернуть значения в списке
- 21. Подсчет последовательных повторений слова с регулярным выражением в Java
- 22. Подсчет уникальных элементов в списке
- 23. Подсчет конкретных чисел в списке
- 24. Подсчет количества вхождений в списке
- 25. подсчет вхождений таймфреймов в списке
- 26. Подсчет последовательных номеров в списке
- 27. подсчет количества элементов в списке
- 28. Подсчет повторяющихся чисел в списке
- 29. Подсчет частоты фактора в списке()
- 30. Подсчет в 2D-списке, Ссылка
Почему рекурсия и изменяемое ограничение? Я мог бы вытащить петлю за цикл и ячейку ref, но это не принципиально другое. – JaredPar
Я думал, что будет чище и короче. Не уверен, что вы подразумеваете под «но это не принципиально другое». –
Просто nitpicking, но '[4,3,2]' является кортежем - я думаю, вы имели в виду '[4; 3; 2]' :) –