⚖️ A1sDS vs A1sAR

Шпаргалка по выбору: когда использовать структуры, а когда массивы

⚡ Быстрое правило

Пары ключ-значение? → A1sDS (структуры)

Список элементов? → A1sAR (массивы)

📊 Таблица выбора

Задача Модуль Функция
Создать массив A1sAR A1sAR.Of(val1, val2, ...)
Создать структуру A1sDS A1sDS.Of(key1, val1, key2, val2, ...)
Объединить массивы A1sAR A1sAR.Union(arr1, arr2, ...)
Объединить структуры A1sDS A1sDS.Concatenate(s1, s2, ...)
Найти общие элементы массивов A1sAR A1sAR.Intersection(arr1, arr2)
Найти общие ключи структур A1sDS A1sDS.Intersection(s1, s2)

🏗️ Создание коллекций

Массивы — A1sAR.Of()

// До 40 элементов
Товары = A1sAR.Of("товар1", "товар2", "товар3");

// Фиксированный размер
Буфер = A1sAR.OfN(100, 0); // 100 нулей

Структуры — A1sDS.Of()

// До 20 пар ключ-значение
Пользователь = A1sDS.Of(
    "Имя", "Иван",
    "Возраст", 30,
    "Email", "ivan@example.com"
);
❌ НЕ используйте:
// Избыточно!
Стр = A1sDS.Struct(A1sAR.Of("key", "val"));

// ✅ Правильно:
Стр = A1sDS.Of("key", "val");

🔀 Операции множеств

Над массивами — A1sAR
Массив1 = A1sAR.Of(1, 2, 3);
Массив2 = A1sAR.Of(2, 3, 4);

// Объединение (уникальные)
Union = A1sAR.Union(Массив1, Массив2);
// [1, 2, 3, 4]

// Пересечение (общие)
Intersection = A1sAR.Intersection(Массив1, Массив2);
// [2, 3]

// Разность (уникальные первого)
Difference = A1sAR.Difference(Массив1, Массив2);
// [1]
Над структурами — A1sDS
Стр1 = A1sDS.Of("a", 1, "b", 2);
Стр2 = A1sDS.Of("b", 3, "c", 4);

// Объединение (последнее побеждает)
Union = A1sDS.Concatenate(Стр1, Стр2);
// {a: 1, b: 3, c: 4}

// Пересечение (общие ключи)
Intersection = A1sDS.Intersection(Стр1, Стр2);
// {b: 3}

// Разность (уникальные ключи первого)
Difference = A1sDS.Difference(Стр1, Стр2);
// {a: 1}

🔍 Фильтрация данных

Массивы — A1sAR

Числа = A1sAR.Of(1, 2, 2, 3, 3, 3, 4);

// Удалить дубликаты
Уникальные = A1sAR.RemoveDuplicates(Числа);
// [1, 2, 3, 4]

// Проверка вхождения
Есть = A1sAR.Contains(Числа, 2);
// Истина

Структуры — A1sDS

Пользователь = A1sDS.Of(
    "Имя", "Иван",
    "Возраст", 30,
    "Пароль", "secret",
    "Email", "ivan@example.com"
);

// Выбрать только нужные поля
Публичные = A1sDS.OfPick(
    Пользователь,
    "Имя,Возраст,Email"
);

// Исключить приватные поля
Безопасные = A1sDS.OfOmit(
    Пользователь,
    "Пароль"
);

⚙️ Конфигурации и дефолты

✅ Только для структур — A1sDS

Применение значений по умолчанию

// Пользовательская конфигурация
Конфиг = A1sDS.Of("host", "prod.com");

// Значения по умолчанию
Дефолты = A1sDS.Of(
    "host", "localhost",
    "port", 8080,
    "timeout", 30
);

// Применить дефолты (пользовательские приоритетнее)
Итог = A1sDS.OfDefaults(Конфиг, Дефолты);
// {host: "prod.com", port: 8080, timeout: 30}

Вложенные настройки — A1sDS.GetOrInsertPath()

Настройки = Новый Структура();

// Создаст путь автоматически: ui.theme.dark
A1sDS.GetOrInsertPath(Настройки, "ui.theme.dark", Истина);
A1sDS.GetOrInsertPath(Настройки, "ui.font.size", 14);

// Настройки:
// {
//   ui: {
//     theme: {dark: Истина},
//     font: {size: 14}
//   }
// }

🎯 Комбо-приём: Массив структур → фильтрация ключей

// Массив пользователей с приватными данными
Пользователи = Новый Массив();
Пользователи.Добавить(A1sDS.Of("Имя", "Иван", "Возраст", 30, "Пароль", "secret1"));
Пользователи.Добавить(A1sDS.Of("Имя", "Мария", "Возраст", 25, "Пароль", "secret2"));

// Убрать пароли из всех пользователей
Публичные = Новый Массив();
Для Каждого Пользователь Из Пользователи Цикл
    Публичные.Добавить(A1sDS.OfOmit(Пользователь, "Пароль"));
КонецЦикла;

// Публичные:
// [
//   {Имя: "Иван", Возраст: 30},
//   {Имя: "Мария", Возраст: 25}
// ]

📋 Шпаргалка по синтаксису

Задача A1sAR A1sDS
Создание Of(val, val, ...) Of(key, val, key, val, ...)
Фикс. размер OfN(10, defaultVal)
Объединение Union(arr1, arr2, ...) Concatenate(s1, s2, ...)
Пересечение Intersection(...) Intersection(...)
Разность Difference(...) Difference(...)
Проверка вхождения Contains(arr, val) HasKey(struct, "key")
Первый/последний First(arr) / Last(arr)
Удалить дубликаты RemoveDuplicates(arr)
Выборка полей OfPick(s, "key1,key2")
Исключить поля OfOmit(s, "key1,key2")
Дефолты OfDefaults(s, defaults)
Вложенный путь GetOrInsertPath(s, "a.b.c", val)

💡 Вывод

A1sAR — для работы с массивами значений

A1sDS — для работы со структурами (пары ключ-значение)

🤝 Оба модуля работают вместе идеально!