Производительность
November 2, 2022
Как посчитать количество уникальных элементов
Есть два способа вычисления количества уникальных элементов в коллекции: с использование метода Distinct и превращение в множество HashSet. Что более эффективно?
Оказывается, всё зависит от количества уникальных элементов.Оказывается, всё зависит от количества уникальных элементов. Рассмотрим две ситуации.
Ситуация 1. Количество элементов многократно превосходит количество уникальных элементов.
## uses Utils; var n := 1000000; var a := ArrRandomInteger(n,0,100); var tmp: integer; Benchmark(() -> (tmp := a.Distinct.Count)).Println; Benchmark(() -> (tmp := HSet(a).Count)).Println;
12.88 мс 14.71 мс
Ситуация 2. Практически все элементы коллекции уникальны
## uses Utils; var n := 1000000; var a := ArrRandomInteger(n,0,integer.MaxValue-1); var tmp: integer; Benchmark(() -> (tmp := a.Distinct.Count)).Println; Benchmark(() -> (tmp := HSet(a).Count)).Println;
58.09 мс 39.72 мс
Заключение. Если большинство элементов коллекции уникальны, то предпочтительнее использовать преобразование коллекции во множество HashSet. Если же имеется множество повторяющихся элементов, то предпочтительнее использование метода Distinct.