[C#]想说一说嵌套数组

闲言少叙,说正经话。本文就说一说嵌套数组,估计又有人不满了,你也许会说:“这玩意儿平时都不曾用,说来干吗?” 如果只说平时用的,平时不用的就不说了,那就不是我了。我这个人很有趣,专挑别人不以为然的事情来说。

先看看下面的代码,看了之后不要紧张。

复制代码
 1             int[][][] arrs = new int[3][][];
 2             arrs[0] = new int[2][]
 3             {
 4                 new int[3] { 1, 2, 3 },
 5                 new int[1] { 4 }
 6             };
 7             arrs[1] = new int[][]
 8             {
 9                 new int[] { 5, 6 },
10                 new int[] { 7, 8, 9, 10 },
11                 new int[] { 11, 12, 13 }
12             };
13             arrs[2] = new int[][]
14             {
15                 new int[] { 14, 15, 16, 17, 18 }
16             };
复制代码
这就是所谓的嵌套数组,其实也没什么的,要理解的话也不那么复杂。无非就是数组里面套了数组。也就是说,一个数组里面(第一层),每个元素又是一个数组(第二层)……
就拿上面的int数组来说,里面套了三层,一般来说,最里面一层数组的元素就不是数组了,就应该是单个int数值了。所以,嵌套数组的最里层都是单个值作为元素的,不然这数组可就要无限地套下去了。

要知道以上代码中的数组是啥结构也不用画图,我们只要调试运行,在给数组赋值后停下来,从“局部变量”窗口中我们可以查看到数组的结构。如下图:

这样看,应该可以理解的。

现在,就回到代码中,我们看要如何声明,其实说起来也不难,和声明一般的数组一样,比如int[][]就是两层数组。但要注意的问题在于实例化的时候。

在实例化的时候,最外面一层数组可以指定大小,但里面套的数组则不可;里面的数组在下一层数组实例化时才可以指定大小。一句话总结:new哪一层数组就可以明确指定哪一层数组的大小。

例如,下面的new法是会报错的。

            byte[][][] arr= new byte[3][5][2];
要这样new才不会报错。

            byte[][][] arr= new byte[3][][];
因为这样声明new了最外层的byte数组,所以只能给这一层指定维数。我们继续,把整个数组new完,并赋值。

复制代码
            byte[][][] arr = new byte[3][][] //3个元素
            {
                /* [0] */new byte[2][] //2个元素
                        {
                            /* [0] */new byte[] { 0x20, 0x01, 0xFE },
                            /* [1] */new byte[] { 0xD2, 0xC6, 0x01, 0x22 }
                        },
                /* [1] */new byte[1][] //1个元素
                        {
                            /* [0] */new byte[] { 0x33, 0x4A }
                        },
                /* [2] */new byte[3][] //3个元素
                        {
                            /* [0] */new byte[] { 0x2e, 0x40 },
                            /* [1] */new byte[] { 0x52, 0xb2, 0x06 },
                            /* [2] */new byte[2] { 0x11, 0x21 }
                        }
            };
复制代码
怎么样?有何感想?带了注释应该容易看一些。由于越往里面数组的层数就递减,所以每进一层,就少一对中括号,第一层三对中括号,第二层两对中括号,第三层一对中括号,然后里面就是真正的单个byte值。

在写代码的时候,我们应该使用上面例子的排版方式,这样层次就分明,写的时候不容易写错,就和代码中大括号的层次一样,恰好,用来包含数组元素的也是一对大括号。有层次地缩进,就不容易写错。

下面我们来个更猛的。

复制代码
            string[][][][][][][] strArr = new string[][][][][][][]
            {
                new string[][][][][][]
                {
                    new string[][][][][]
                    {
                        new string[][][][]
                        {
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "ai", "gooo", "put" },
                                    new string[] { "san", "de" }
                                },
                                new string[][]
                                {
                                    new string[] { "ki", "chd" }
                                }
                            },
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "ga" },
                                    new string[] { "x", "y", "w", "h" },
                                    new string[] { "cc", "li" }
                                },
                                new string[][]
                                {
                                    new string[] { "su" },
                                    new string[] { "dou", "xx", "f" }
                                },
                                new string[][]
                                {
                                    new string[] { "z", "xoo", "ui" },
                                    new string[] { "gn", "sun", "tttt", "fan" },
                                    new string[] { "yin", "ci", "zh" },
                                    new string[] { "oo", "yi" }
                                }
                            }
                        },
                        new string[][][][]
                        {
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "da" }
                                },
                                new string[][]
                                {
                                    new string[] { "00" }
                                }
                            },
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "xi", "ix" },
                                    new string[] { "ch" }
                                }
                            }
                        }
                    },
                    new string[][][][][]
                    {
                        new string[][][][]
                        {
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "zz", "ee" },
                                    new string[] { "teng" }
                                }
                            },
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "shi", "me", "ea" }
                                },
                                new string[][]
                                {
                                    new string[] { "ut" }
                                }
                            }
                        }
                    }
                },
                new string[][][][][][]
                {
                    new string[][][][][]
                    {
                        new string[][][][]
                        {
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "dd", "eaood" }
                                },
                                new string[][]
                                {
                                    new string[] { "ss", "48" },
                                    new string[] { "ha", "tie" }
                                }
                            }
                        },
                        new string[][][][]
                        {
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "tian" }
                                }
                            }
                        },
                        new string[][][][]
                        {
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "lan" }
                                },
                                new string[][]
                                {
                                    new string[] { "y", "zu" }
                                }
                            }
                        }
                    },
                    new string[][][][][]
                    {
                        new string[][][][]
                        {
                            new string[][][]
                            {
                                new string[][]
                                {
                                    new string[] { "hao", "zen", "oo", "du" },
                                    new string[] { "xi", "iow", "zzzzz" },
                                    new string[] { "hie", "zz", "8e" }
                                },
                                new string[][]
                                {
                                    new string[] { "fo" }
                                }
                            }
                        }
                    }
                }
            };

[C#]想说一说嵌套数组

时间: 2024-10-28 12:24:28

[C#]想说一说嵌套数组的相关文章

C#多维数组与嵌套数组

using System; namespace abc.e.f//等价于下面分层嵌套的写法.且这种写法不管命名空间abc有没有定义过,也不管命名空间e有没有定义过 { class MYTestX { static void Main(string[] args) { int[,] matrix = new int[2, 5];//多维数组.只是从维度上增加,并不是数组嵌套.有点像多维矩阵 int[][] mt1 = new int[2][];//数组的数组,有两个元素,每个元素是一个数组.相当于

将多重嵌套数组恢复为一个数组

问题:给定一个任意多重嵌套数组,把它恢复为一个完整的数组,没有嵌套. 样例: Input steamrollArray([[["a"]], [["b"]]]) steamrollArray([1, [2], [3, [[4]]]]) Output ["a", "b"] [1, 2, 3, 4] 实现:利用dfs搜索,一步步找是否是数组(Array.isArray(arr)判断是否是数组) 代码如下: 1 function st

HTML(DOM)与JavaScript嵌套数组之间相互转换

1. [代码][JavaScript]代码     /*<html><head>  <title>HTML RESTructure</title><style></style><script>*/// workDOM函数遍历目标元素或节点// 有两种模式://   1. `element`模式(默认)(包含所定义的元素项)//   2. `node`模式(包含文本节点在内的所有节点)function walkDOM(mod

MongoDB学习笔记~官方驱动嵌套数组对象的更新

回到目录 对于数组对象mongodb本身是支持的,不过对于数组的更新,mongodb的Csharp驱动目前只支持一级,即你的对象里包含数组,而数组又包括数组,这表示两层,这在更新子数组时,Csharp驱动是不支持的,今天要说的就是如何让它支持子数组的更新,下面是我给出的数据结构 在Mongodb的Csharp驱动里,一般的更新方法如下 update = new UpdateDocument {{ "$set", new BsonDocument("OrderList.$.Us

monggo 嵌套数组操作

{    "_id" : "201",    "shopServiceCategorys" : [         {            "shopServiceCategoryId" : NumberLong(4593138),            "shopid" : NumberLong(201),            "serviceCategoryId" : Numbe

PHP中保留key值把value置0,嵌套数组可用

实现一个把PHP数组中所有元素设置为0的函数,用了递归 public function setArraytoZero(&$array) { foreach ($array as &$value){ if(is_array($value)) { $this->setArraytoZero($value); } else { $value = 0; } } }

对象、数组 深度复制,支持对象嵌套数组、数组嵌套对象

对象复制 Object.prototype.maps = function(){ let newObj = new Object(); let that = this; Object.keys(that).forEach(function(k){ if( that[k].constructor == Object){ newObj[k] = that[k].maps() }else if(that[k].constructor == Array){ newObj[k] = that[k].map

php嵌套数组递归搜索返回数组key

var rewardTypes={"experience":{"\u7ecf\u9a8c\u503c":{"1":"\u660e\u661f\u6587\u827a\u996d","2":"\u6587\u827a","3":"\u963f\u91cc\u5df4\u5df4\u7f51"}},"money":{"\u

【MongoDB】嵌套数组查询方案

From:http://stackoverflow.com/questions/12629692/querying-an-array-of-arrays-in-mongodb 数据 db.multiArr.insert({"ID" : "fruit1","Keys" : [["apple", "carrot", "banana"]]}) db.multiArr.insert({"