🔹 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.
+ .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.