Новое Распределяем каналы MAX по категориям и территориям. Читать новость

🔹 PascalABC.NET

Загружаем изображение…
🔹 PascalABC.NET
+ .NET 10:
FrozenSet

Продолжаем знакомство с «замороженными» коллекциями .NET.

После FrozenDictionary — его родственник FrozenSet<T>.
uses System.Collections.Frozen;

begin
var s := HSet('Pascal','C#','Python');
var fs: FrozenSet<string> := s.ToFrozenSet();

Println(fs.Contains('Pascal'));
end.
FrozenSet похож на обычный HashSet, но после создания его содержимое уже нельзя изменять.
Зачем такое ограничение?

Чтобы .NET мог один раз проанализировать элементы множества и подобрать внутреннюю структуру, оптимизированную для последующих поисков.

В зависимости от данных Contains у FrozenSet может работать примерно в 2–6 раз быстрее, чем у обычного HashSet.

Но за это приходится платить при создании: построение FrozenSet может быть в несколько раз медленнее — в отдельных тестах примерно в 8–9 раз.

Поэтому FrozenSet рассчитан на тот же сценарий:
создали один раз → проверяем наличие элементов очень много раз.

Например:
• набор ключевых слов;
• разрешённые или запрещённые значения;
• расширения файлов;
• имена команд;
• коды и идентификаторы;
• любые справочные множества, которые после запуска программы не меняются.

HashSet — если множество нужно изменять.
FrozenSet — если его нужно один раз сформировать и затем очень быстро выполнять Contains.
Просмотры: 60
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти