向程序员解释嵌套数组

时间:2008-11-04 01:19:55

标签: arrays language-agnostic multidimensional-array

您是如何向程序员解释嵌套数组的?我想的是对编程具有入门级理解的人,但正在尝试进行更复杂的编码。

带数组的数组有效,但他们无法完全理解这个想法。

编辑:嵌套数组的示例:

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

当然,它们通常比这更复杂,也许这就是问题所在。

12 个答案:

答案 0 :(得分:10)

告诉他们将数组视为列表 - 这有助于为他们提供一些不那么抽象的东西,比如购物清单。然后,嵌套数组就是列表列表。

也许我在amazon.com上有一个待办事项清单,购物清单和心愿单。现在我列出了所有列表,我可以通过逐步查看每个列表中的所有元素。

答案 1 :(得分:5)

嵌套数组是集合中的集合。因此,图书馆有一套书,一本书有一套章节。章节有一组段落,段落有一组句子。一个句子有一组单词。

For each book in library

    For each chapter in book

        For each paragraph in chapter

等...

答案 2 :(得分:2)

你是如何解释的?对于理解一维数组能够掌握概念而不是每个数组元素包含另一个数组而不是int或字符串的人来说,这似乎不是一个大跳跃。

也许比较目录的类比会有所帮助,一维数组类似于包含一堆文件的目录,一个包含多个其他目录的目录的二维数组,每个目录包含一堆文件,等等

答案 3 :(得分:2)

画画。

变量是一个方框 1维数组是一排方框 二维数组是一个盒子网格 三维数组是一个盒子的立方体。

如果他们对一般概念有困难,请不要试图直观地解释4个维度。

答案 4 :(得分: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循环来显示位图。

示例总是有帮助的,这也让他们将嵌套数组视为多维数组。实际上,在学习像Python这样的语言中的“嵌套”数组之前,用C语言理解多维数组可能更好,在这些数组中你可以在同一个数组中有不同的嵌套级别。

答案 5 :(得分:1)

体育可以提供适当的类比来描述应用嵌套数组。一个团队是一群人,竞争是一系列相互对抗的团队。

然而,这是一个找到与学习者点击的类比的案例。找到正确的比喻,你甚至可以让最慢的学习者理解。只要确保你的类比是水密的。像抽象一样,它们都是漏洞。

答案 6 :(得分:1)

一个具体的例子是书后面的索引。单词列表,每个单词与页码列表相关联。

苹果 - 1,2,3-4
熊 - 32-35,79,73
猫 - 14,15

答案 7 :(得分:0)

如果您正在查看C类型,非粗糙的数组,将其与数字进行比较,基数为10的数字,以及数字可能有所帮助。同样效果的另一个好的来源是时间,因为它有一个非均匀的基础60s = 1m,60m = 1h,24h = 1day,7day = 1week

答案 8 :(得分:0)

我记得我的老师在解释多维数组时所做的是引入一个小的便携式索引卡文件(与前一段时间可以在库中找到的旧Dewey十进制系统机柜不同)。

每个槽是一个二维阵列(即每个索引都有一个记录卡阵列)。但容器本身是一个三维数组的索引(即每个索引都有一个包含一系列记录卡的数组)。然后从那里理论很容易。

具体示例非常有用。

答案 9 :(得分:0)

2个维度很容易解释。想想一张桌子。 3个维度只是想到立方体或其他3D图像。 4个维度想象一系列图像,如电影,第四维度是时间。

使用该模型难以可视化4个维度。但是把它想象成一个文件柜里面有另一个文件柜帮助。你打开抽屉,弹出文件柜。你找到你想要的抽屉,然后打开那个抽屉,然后一遍又一遍地弹出另一个文件柜....直到最后你拿到了​​你的纸。

答案 10 :(得分:0)

也许你是从了解数组数组的人的上下文中解释它的。我试图让他们意识到他们已经通过从最小的(读取内部数组)开始已经理解它们......然后慢慢扩展,给他们足够的时间来提问,直到完成。

绘图很有帮助,但你需要给这个学生一些信息并慢慢走,我认识的大多数程序员都倾向于快速地去解释事情,即使听众不再追踪所说的内容。

我是一个比喻家伙,所以我可能会做一些关于一系列盒子的东西,每个盒子都有编号,每个盒子都包含一个类似的(但是更小的系列)。我会把这个只有两个层次得到理解,然后可能会谈论3个维度进行确认。但我会避免4个维度,理由是他们可能会认为没有4维这样的东西,或者你无法测量时间,或其他这样的隐喻地雷/分心......导致这是另一个问题程序员倾向于ADD并喜欢被跟踪。

另外,为什么你不使用散列哈希,更容易引用。 :)

底线,宝贝步骤。

答案 11 :(得分:0)

数组只是一个对象 - 一个东西。一旦他们得到那些东西应该很容易理解