Объяснение вложенных массивов программисту

Как вы объяснили программисту вложенные массивы. Я думаю о ком-то, кто разбирается в программировании на начальном уровне, но пытается делать более сложное кодирование.

Массив с массивом работает, но они не могут полностью понять идею.

Редактировать: пример вложенного массива:

array(
    'array1' => array(
        'key1' => 'val1',
        'key2' => 'val2',
    ),
    'array2' => array(
        'key1' => 'val1',
        'key2' => 'val2',
    ), 
);

Конечно, они обычно более сложные, и, возможно, в этом проблема.

Пожалуйста, объясните (сначала нам :), что вы имеете в виду под «вложенными массивами»! Сделайте пример на C или другом языке ...

Gabriele D'Antona 04.11.2008 04:25

Этот вопрос кажется не по теме, потому что он выходит за рамки обсуждения, как описано в справочном центре.

user1228 23.08.2013 19:20
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
5
2
6 980
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Скажите им, чтобы они воспринимали массив как список - это помогает дать им что-то менее абстрактное, например, список покупок. Тогда вложенный массив - это просто список списков.

Может быть, у меня есть список дел, список покупок и список желаний на amazon.com. Теперь у меня есть список всех моих списков, и я могу просматривать все эти элементы в каждом списке, просматривая их.

Как вы это объяснили? Это не кажется большим скачком для тех, кто разбирается в одномерных массивах, чтобы понять концепцию, согласно которой каждый элемент массива вместо int или строки содержит другой массив.

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

Если вы смотрите на массивы типа C, не рваные, сравнивая его с числами, часть с основанием 10 и цифры могут помочь. Другим хорошим источником того же эффекта может быть время, так как оно имеет неравномерную базу 60 с = 1 м, 60 м = 1 час, 24 часа = 1 день, 7 дней = 1 неделя.

В качестве примера используйте растровое изображение. В C вы можете сделать растровое изображение X следующим образом:

int x[5][5] = {
    { 1,0,0,0,1 },
    { 0,1,0,1,0 },
    { 0,0,1,0,0 },
    { 0,1,0,1,0 },
    { 1,0,0,0,1 }
};

Затем покажите им, как использовать вложенные циклы for для отображения растрового изображения.

Примеры всегда помогают, и это также заставляет их думать о вложенных массивах как о многомерных массивах. На самом деле, вероятно, лучше понять многомерные массивы на таком языке, как C, прежде чем изучать «вложенные» массивы в таких языках, как Python, где у вас могут быть разные уровни вложенности в один и тот же массив.

вы может делаете это на C, ваш компилятор просто укажет, что, возможно, приведение вашего int к int * в этом разделе кода - не лучшая идея, которую вы когда-либо придумали;)

tloach 04.11.2008 04:38

Что ты имеешь в виду? Это правильный способ инициализации многомерного массива, я использую его все время, и мой компилятор ничего об этом не говорит.

Jeremy Ruten 04.11.2008 04:43

Я только что просмотрел его и могу подтвердить, что мой код полностью в порядке. Я понимаю, почему вы можете подумать, что "{1,0,0,0,1}" оценивает указатель на int, но на самом деле внутренние фигурные скобки в инициализации предназначены только для удобства чтения. Если написать его без фигурных скобок, это даст тот же эффект.

Jeremy Ruten 04.11.2008 04:50

Спорт может предоставить подходящие аналогии для описания применения вложенных массивов. Команда - это множество людей, соревнование - это множество команд, которые играют друг против друга.

Однако это случай нахождения аналогии, которая вызывает у учащегося. Найдите правильную аналогию, и вы поймете даже самый медленный из учеников. Просто убедитесь, что ваши аналогии водонепроницаемы. Как и абстракции, они дырявые.

Вложенный массив - это набор внутри набора. Итак, в библиотеке есть набор книг, в книге - набор глав. В главе есть набор абзацев, в абзаце - набор предложений. В предложении есть набор слов.

For each book in library

    For each chapter in book

        For each paragraph in chapter

так далее...

Конкретным примером является индекс в конце книги. Список слов, каждое слово связано со списком номеров страниц.

яблоки - 1, 2, 3-4
медведи - 32-35, 79, 83
кошки - 14, 15

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

С помощью этой модели трудно визуализировать 4+ измерения. Но думайте об этом как о картотеке с другим картотечным шкафом внутри. Вы открываете ящик и выскакивает шкаф для документов. Вы находите нужный ящик, открываете его, и из него выскакивает другой шкаф для хранения документов ... снова и снова, пока, наконец, вы не получите свою бумагу.

Нарисуй это.

Переменная - это ящик
Одномерный массив представляет собой ряд ящиков. Двумерный массив представляет собой сетку из ящиков.
Трехмерный массив представляет собой куб из ящиков.

Если у них возникли проблемы с общей концепцией, не пытайтесь визуально объяснить 4 измерения.

Возможно, вы объясняете это в контексте того, кто разбирается в массивах массивов. Я бы попытался обманом заставить их понять, что они уже понимают их, начиная с самого маленького (читайте внутренний массив) ... и медленно расширяясь, давая им достаточно времени, чтобы задавать вопросы, пока они не закончат.

Рисование помогает, но в этом случае вам нужно дать студенту некоторую информацию и действовать медленно, большинство программистов, которых я знаю, склонны действовать быстро и любят объяснять вещи ДАЖЕ, когда слушатель больше не отслеживает, что говорится.

Я люблю метафоры, поэтому я, вероятно, придумал бы что-нибудь о серии коробок, каждая из которых пронумерована, а каждая коробка будет содержать аналогичную (но гораздо меньшую серию), также пронумерованную. Я бы сказал, что это только два уровня понимания, а затем, возможно, расскажу о трех измерениях для подтверждения. Но я бы избегал четырех измерений на том основании, что они могут зацикливаться на идее, что не существует такой вещи, как четыре измерения, или вы не можете измерить время, или другие подобные метафорические наземные мины / отвлекающие факторы ... потому что это другая проблема , программисты склонны ДОБАВЛЯТЬСЯ и получать удовольствие от того, что их отвлекают.

Также, почему вы не используете хеш-значения, на которые гораздо проще ссылаться. :)

Итог, детские шаги.

массив - это просто объект - вещь. все должно быть просто для понимания, как только они это поймут

Другие вопросы по теме