PassFront
  1. PassFront
  2. База знаний
  3. Массивы и структуры данных

Как комбинировать хеш-таблицы?

Массивы и структуры данных

Хеш-таблицы комбинируют для сложных задач: вложенные Map/объекты (многоуровневые ключи), Map значений-массивов (группировка), составные ключи, комбинация с Set. Дают эффективный O(1) доступ к структурированным данным.

Способы комбинирования

Вложенные хеш-таблицы (многоуровневые ключи)

Map внутри Map — для двумерного доступа:

const grid = new Map();
grid.set('row1', new Map([['col1', 'A']]));
grid.get('row1').get('col1'); // 'A'

Для матриц, кешей по нескольким ключам.

Map со значениями-массивами (группировка)

Группировка элементов по ключу:

const byRole = new Map();
for (const user of users) {
  if (!byRole.has(user.role)) byRole.set(user.role, []);
  byRole.get(user.role).push(user);
}
// byRole: { admin: [...], user: [...] }

Map + Set (уникальные связи)

Значение — Set для уникальности:

const followers = new Map(); // userId → Set подписчиков
followers.set(1, new Set([2, 3]));

Графы, отношения многие-ко-многим.

Составные ключи

Ключ из нескольких значений (строкой или через вложенность):

const cache = new Map();
cache.set(`${x},${y}`, value); // ключ из координат

Индексы (несколько Map)

Одни данные, разные индексы для O(1) поиска:

const byId = new Map();    // id → объект
const byEmail = new Map(); // email → объект

Зачем

  • O(1) доступ к структурированным данным.
  • Замена вложенных циклов (O(n²) → O(n)).
  • Группировка, индексация, отношения.

Коротко для собеседования

Хеш-таблицы комбинируют: вложенные Map (многоуровневые ключи — матрицы, кеши), Map со значениями-массивами (группировка по ключу), Map + Set (уникальные связи — графы), составные ключи (${x},${y}), несколько Map как индексы (byId, byEmail — O(1) поиск по разным полям). Дают эффективный O(1) доступ к структурированным данным вместо вложенных циклов.

Другие вопросы раздела