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

Содержание:

  1. Понять двухуровневое устройство

    • внешний массив ссылок;
    • отдельное создание каждой внутренней строки;
    • собственная длина строки;
    • возможность null, пустой и непустой строки;
    • тип T[][] и nullable-форма T[]?[].
  2. Строить защищённый вложенный обход

    • проверка существования строки;
    • получение границы только из текущей строки;
    • различие внешнего и внутреннего индекса;
    • агрегаты по строкам и всей структуре;
    • логические столбцы с различным числом участников.
  3. Прослеживать псевдонимы строк

    • две внешние позиции, ссылающиеся на один массив;
    • изменение общего объекта;
    • замена одной внешней ссылки;
    • перестановка строк без копирования элементов;
    • ReferenceEquals и граф объектов.
  4. Различать модели копирования

    • поверхностная копия внешнего массива;
    • независимая копия каждой позиции;
    • структурная глубокая копия с сохранением внутренней топологии псевдонимов;
    • копирование null и пустых строк;
    • контракт обработки по позиции и по уникальному объекту.
  5. Выбирать между T[,] и T[][]

    • гарантированная прямоугольная форма;
    • нерегулярное число элементов;
    • число внутренних объектов и ссылок;
    • необходимые проверки;
    • число реально хранимых элементных позиций;
    • операции, удобные или неудобные для каждой формы.
  6. Преобразовывать прямоугольную и зубчатую формы

    • прямоугольная таблица в массив строк;
    • проверка одинаковой длины при обратном преобразовании;
    • удаление заполнителя из префиксной модели;
    • маска присутствия, если заполнитель может совпадать с реальным значением;
    • отдельная метаинформация для null и пустой строки.
  7. Сворачивать нерегулярную структуру

    • общий массив values;
    • массив смещений offsets;
    • полуинтервал элементов каждой строки;
    • неубывающие смещения;
    • поиск строки по глобальной позиции через UpperBound;
    • восстановление длин.
  8. Проектировать достаточные метаданные

    • wasNull для различения отсутствующей и пустой строки;
    • representative для восстановления общей строки;
    • проверка согласованности длин и смещений;
    • уровни информации: значения, форма, отсутствие и топология;
    • полный круг кодирования и декодирования.
  9. Транспонировать нерегулярную форму

    • компактное транспонирование с удалением пропусков;
    • сохраняющее пропуски представление через nullable-элементы;
    • длина каждой строки результата;
    • обратимость и потеря информации;
    • две различные формы с одинаковым компактным результатом.
  10. Использовать специализированные нерегулярные модели

    • треугольник Паскаля;
    • нижний треугольник симметричной матрицы;
    • группы переменного размера;
    • нерегулярные скалярные произведения;
    • перестановка строк по циклам.
  11. Сравнивать форму, содержимое и топологию

    • одинаковые состояния null и длины;
    • поэлементное равенство;
    • одинаковый рисунок разделения внутренних объектов;
    • различные отношения равенства для одной пары структур;
    • необходимость явно назвать требуемое свойство.
  12. Оценивать цену представления

    • число элементных ячеек;
    • число массивов и ссылок;
    • дополнительные метаданные;
    • стоимость линейного поиска уникальных объектов без коллекций;
    • невозможность объявить форму автоматически более быстрой без измерения.