Arrays 向程序员解释嵌套数组

Arrays 向程序员解释嵌套数组,arrays,language-agnostic,multidimensional-array,Arrays,Language Agnostic,Multidimensional Array,你是如何向程序员解释嵌套数组的。我想有人对编程有入门级的理解,但正在尝试做更复杂的编码 使用数组的数组可以工作,但是他们不能完全理解这个想法 编辑:嵌套数组示例: array( 'array1' => array( 'key1' => 'val1', 'key2' => 'val2', ), 'array2' => array( 'key1' => 'val1', 'key2'

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

使用数组的数组可以工作,但是他们不能完全理解这个想法

编辑:嵌套数组示例:

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

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

告诉他们将数组视为一个列表-这有助于给他们一些不那么抽象的东西,比如杂货店列表。然后,嵌套数组就是一个列表列表


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

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


也许比较目录的类比会有所帮助,一维数组类似于包含一堆文件的目录,二维数组类似于包含几个其他目录的目录,每个目录都包含一堆文件,等等,以10为基数的数字可能会有所帮助。这种效果的另一个好来源是时间,因为它有一个不均匀的基准60s=1m,60m=1h,24h=1day,7day=1week

以位图为例。在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等语言中的多维数组,因为在同一数组中可以有不同级别的嵌套。

Sports可以提供适当的类比来描述应用嵌套数组。一个团队是一组人,一场比赛是一组相互竞争的团队


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

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

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维很容易解释。想一张桌子。3维——想想立方体或其他3d图像。4维将一系列图像想象成电影,第4维是时间

使用该模型很难将4+个维度可视化。但可以把它想象成一个文件柜,里面有另一个文件柜。你打开抽屉,弹出一个文件柜。你找到你想要的抽屉,打开那个抽屉,又弹出一个文件柜……一遍又一遍,直到最后你拿到你的文件。

画出来

变量是一个框
一维数组是一行框。
二维数组是长方体的网格。
三维数组是长方体的立方体


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

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

画画是有帮助的,但在这种情况下,你需要给学生一些信息,慢慢来。我认识的大多数程序员都倾向于快,喜欢解释一些事情,即使听者不再跟踪所说的内容

我是一个喜欢隐喻的人,所以我可能会编造一些关于一系列盒子的东西,每个盒子都有编号,然后每个盒子都包含一个同样编号的盒子(但要小得多)。我会把它带到两个层次去理解,然后也许会讨论3个维度来确认。但是我会避免使用四维,因为他们可能会认为没有四维,或者你不能测量时间,或者其他类似的隐喻地雷/干扰…因为这是另一个问题,程序员倾向于添加并喜欢被忽略

还有,你为什么不使用一个更容易引用的散列呢


一句话,小步骤。

数组只是一个对象,一种东西。一旦他们明白了这一点,一切都应该简单易懂

请(首先向我们解释:)你所说的“嵌套数组”是什么意思!用C或其他语言做一个例子……这个问题似乎离题了,因为它不在帮助中心所描述的讨论范围内。你可以用C来做这件事,你的编译器只会指出,也许在代码的这一部分将你的int转换为int*不是你想到的最好的主意;)什么意思?这是初始化多维数组的正确方法,我一直在使用它,我的编译器没有对它做任何说明。我只是查了一下,可以确认我的代码是完全正确的。我可以理解为什么您可能认为“{1,0,0,0,1}”的计算结果是指向int的指针,但实际上初始化中的内部大括号只是为了可读性。不加大括号的话写出来也会有同样的效果。