如何遍历维数和各维上限未定的多维数组
2011-05-18 14:20
218 查看
这个题目,不方便使用递归!
直觉告诉我,可以用两层遍历,外面一层是维数,里面一层是每一维。但实际上,要做起来很难!
最后决定最外层循环用元素个数,里面配合使用维数的循环,最终解决问题!
直觉告诉我,可以用两层遍历,外面一层是维数,里面一层是每一维。但实际上,要做起来很难!
最后决定最外层循环用元素个数,里面配合使用维数的循环,最终解决问题!
static void ArrEnum(Array arr, Action<Int32[]> func) { Int32[] ix = new Int32[arr.Rank]; Int32 rank = 0; for (int i = 0; i < arr.Length; i++) { // 当前层以下都清零 for (int j = rank + 1; j < arr.Rank; j++) { ix[j] = 0; } // 设置为最底层 rank = arr.Rank - 1; //do something //arr.SetValue(i, ix); func(ix); // 当前层递加 ix[rank]++; // 如果超过上限,则减少层次 while (ix[rank] >= arr.GetLength(rank)) { rank--; if (rank < 0) break; ix[rank]++; } } } static void Test2() { Int32[, , ,] arr = new Int32[24, 24, 24, 24]; Int32 n=1; ArrEnum(arr, ix => arr.SetValue(n++, ix)); ArrEnum(arr, delegate(Int32[] ix) { Console.Write("["); for (int i = 0; i < ix.Length; i++) { if (i > 0) Console.Write(", "); Console.Write(ix[i]); } Console.Write("]\t"); Console.WriteLine(arr.GetValue(ix)); }); }
相关文章推荐
- php如何遍历一个复杂的多维数组
- php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组
- php 多维数组如何用foreach遍历修改其中的一个值
- VB.net遍历维数未知的多维数组的办法
- php两个多维数组组合遍历
- javascript原型和多维数组遍历
- Java 多维数组遍历详解
- PHP递归遍历多维数组实现无限分类的方法
- OC--有这么一个 整数 123456789,如何将这个整数的每一位数,从末位开始依次放入数组中,并遍历 倒序输出字符串
- C++11 range for 遍历多维数组, 迭代变量添加引用 "&"的问题
- php:如何使用PHP排序, key为字母+数字的数组(多维数组)
- 使用c++进行多维数组遍历的方法
- thinPHP中多维数组的遍历
- C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?
- 获取多维数组的维数和行数
- php两个多维数组组合遍历的实例
- 多维数组遍历PHP
- 使用java编写的一个遍历未知维数的数组函数
- PHP7 扩展中如何遍历数组
- thinkPHP中多维数组的遍历方法