如何遍历维数和各维上限未定的多维数组
时间:2022-04-21
本文章向大家介绍如何遍历维数和各维上限未定的多维数组,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这个题目,不方便使用递归!
直觉告诉我,可以用两层遍历,外面一层是维数,里面一层是每一维。但实际上,要做起来很难!
最后决定最外层循环用元素个数,里面配合使用维数的循环,最终解决问题!
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));
});
}
- 新技术革命和新产业变革正进行 “互联网+大数据+人工智能+”时代正到来
- 微信小程序开发及相关设置小结
- gitlab两种连接方式:ssh和http配置介绍
- C#实现微信AES-128-CBC加密数据的解密
- UrlReferrer为空的问题?
- DeepMind发文回顾2017:AlphaGo团队已迎战下一个重大挑战
- [你必须知道的.Net]读书笔记--浅clone与深clone
- Python基础语法学习整理
- 通过部分感知深度卷积网络进行人脸特征点定位
- [你必须知道的.Net]读书笔记--override与new在继承中的区别
- gitlab配置邮件通知功能操作记录
- 微信小程序价值思考:手机端的CS-BS迁移
- Linq2Sql数据实体外部更新时“不能添加其键已在使用中的实体”的解决办法
- 微信小程序:字体保持大小
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP面向对象程序设计之接口的继承定义与用法详解
- PHP简单验证码功能机制实例详解
- php高清晰度无损图片压缩功能的实现代码
- Python自省及反射原理实例详解
- 浅谈django框架集成swagger以及自定义参数问题
- keras CNN卷积核可视化,热度图教程
- 解决tensorflow读取本地MNITS_data失败的原因
- 浅谈keras中Dropout在预测过程中是否仍要起作用
- 浅谈keras中loss与val_loss的关系
- python中tkinter窗口位置坐标大小等实现示例
- python os模块在系统管理中的应用
- Laravel路由研究之domain解决多域名问题的方法示例
- python GUI模拟实现计算器
- 详解php命令注入攻击
- PHP设计模式之策略模式原理与用法实例分析