700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 如何遍历维数和各维上限未定的多维数组

如何遍历维数和各维上限未定的多维数组

时间:2018-08-29 22:39:54

相关推荐

如何遍历维数和各维上限未定的多维数组

这个题目,不方便使用递归!

直觉告诉我,可以用两层遍历,外面一层是维数,里面一层是每一维。但实际上,要做起来很难!

最后决定最外层循环用元素个数,里面配合使用维数的循环,最终解决问题!

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));});}

我不相信神话,我只相信汗水!我不相信命运,我只相信双手! 分类: C#

本文转自大石头博客园博客,原文链接:/nnhy/archive//05/18/2050004.html,如需转载请自行联系原作者

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。