5

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

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

编辑:嵌套数组的示例:

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

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

4

11 回答 11

10

告诉他们把数组想象成一个列表——这有助于给他们一些不那么抽象的东西,比如购物清单。然后,嵌套数组只是列表的列表。

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

于 2008-11-04T01:24:16.887 回答
5

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

For each book in library

    For each chapter in book

        For each paragraph in chapter

ETC...

于 2008-11-04T01:36:58.577 回答
2

你是怎么解释的?对于理解一维数组的人来说,能够理解每个数组元素包含另一个数组而不是 int 或字符串的概念似乎并不是一个很大的飞跃。

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

于 2008-11-04T01:26:24.697 回答
2

画出来。

变量是一个盒子
一维数组是一排盒子。
二维数组是一个盒子网格。
3维数组是一个立方体。

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

于 2008-11-04T01:52:15.987 回答
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 等语言中的多维数组,在这种语言中,您可以在同一个数组中进行不同级别的嵌套。

于 2008-11-04T01:28:43.210 回答
1

运动可以提供适当的类比来描述应用嵌套数组。一个团队是一群人,一场比赛是一群相互对抗的团队。

然而,这是一个找到与学习者相符的类比的案例。找到正确的类比,即使是最慢的学习者也能理解。只要确保你的类比是水密的。像抽象一样,它们是有漏洞的。

于 2008-11-04T01:29:12.993 回答
1

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

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

于 2008-11-04T01:41:16.057 回答
0

如果您正在查看 C 类型、非参差不齐的数组,将其与数字、以 10 为底的部分进行比较,那么数字可能会有所帮助。同样效果的另一个好来源是时间,因为它有一个非统一的基础 60s = 1m, 60m = 1h, 24h = 1day, 7day = 1week

于 2008-11-04T01:27:44.680 回答
0

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

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

于 2008-11-04T01:49:01.923 回答
0

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

绘图会有所帮助,但是在这种情况下,您需要给学生一些信息并慢慢进行,我认识的大多数程序员倾向于快速并喜欢解释事情,即使听众不再跟踪正在说的内容。

我是一个比喻人,所以我可能会编造一些关于一系列盒子的东西,每个盒子都有编号,然后每个盒子都包含一个类似的(但更小的系列)也有编号。我会认为这只有两个层面得到理解,然后也许会谈论 3 个维度来确认。但我会避免使用 4 维,因为他们可能会认为没有 4 维这样的东西,或者你无法测量时间,或者其他诸如此类的隐喻地雷/分心……因为那是另一个问题,程序员往往是 ADD 并且喜欢被跟踪。

另外,您为什么不使用散列的散列,更容易参考。:)

底线,婴儿步骤。

于 2008-11-04T03:35:10.617 回答
0

数组只是一个对象 - 一个东西。一旦他们明白了一切都应该很容易理解

于 2008-11-04T05:29:30.480 回答