一维数组与二维数组相互转换

简介: 一维数组转二维数组最重要的是下标计算。这里使用C#举例。

QQ图片20220426221315.jpg

今天与同事讨论一个问题的时候,聊到,一维数组和二维数组是否可以转换的问题,我这里是持肯定态度的,作为一个程序员,这些年开发都是使用高级语言来开发,对这些底层的东西还不是很了解。


但是,我觉得,计算机总归是二进制,无论是什么数据,到最后的底层就是01的数字组合。既然最终结果都是01的数字组合,那就没有能不能转换的问题了。


我下边做了一下尝试。


一维数组转二维数组最重要的是下标计算。我这里使用C#举例。


一个n个元素的一维数组,转换为r行c列的二维数组,对于一维数组中任意一个元素的下标i(0 <= i < n),其对应的二维数组下标为  (i / c, i % c),  显然, 只与列数c有关,而与行数r无关


一维转二维的代码示例:


/// <summary>
        /// 一维数组转二维数组
        /// </summary>
        /// <returns></returns>
        public static int[,] OneChangeTwo(int[] oneArray)
        {
            // 一维数组长度
            int oneArrayLength = oneArray.Length;
            // 二维数组第一维长度
            int twoArrayOneIndex = 5;
            // 二维数组第二维长度
            int twoArrayTwoIndex = 2;
            // 定义一个固定长度的二维数组
            int[,] twoArray = new int[twoArrayOneIndex, twoArrayTwoIndex];
            // 将一维数组转换成二维数组
            for (int i = 0; i < oneArrayLength; i++)
            {
                twoArray[i / twoArrayTwoIndex, i % twoArrayTwoIndex] = oneArray[i];
            }
            return twoArray;
        }

 

二维数组转一维数组代码示例:i * array.GetLength(1) + j;(两层循环,i在外层)


/// <summary>
        /// 二维数组转一维数组
        /// </summary>
        /// <returns></returns>
        public static int[] TwoChangeOne(int[,] TwoArray)
        {
            // 二维数组第一维长度
            int twoArrayOneIndex = TwoArray.GetLength(0);
            // 二维数组第二维长度
            int twoArrayTwoIndex = TwoArray.GetLength(1);
            // 定义一个一维数组,数组长度为二维数组维度乘积
            int[] oneArray = new int[twoArrayOneIndex * twoArrayTwoIndex];
            // 将二维数组转换成一维数组
            for (int i = 0; i < oneArray.Length; i++)
            {
                oneArray[i] = TwoArray[i / twoArrayTwoIndex, i % twoArrayTwoIndex];
            }
            return oneArray;
        }

 

客户端调用:


static void Main(string[] args)
        {
            int[] oneArray = new int[10]{ 0,1,2,3,4,5,6,7,8,9};
            // 一维转二维
            int[,] resultTwoArray = OneChangeTwo(oneArray);
            for (int i = 0; i < resultTwoArray.GetLength(0); i++)
            {
                for (int j = 0; j < resultTwoArray.GetLength(1); j++)
                {
                    Console.WriteLine(i+","+j+":"+ resultTwoArray[i,j]);
                }
            }
            Console.WriteLine("");
            Console.WriteLine("我是分割线========================================================");
            Console.WriteLine("");
            int[] resultOneArray = TwoChangeOne(resultTwoArray);
            for (int i = 0; i < resultOneArray.GetLength(0); i++)
            {
                Console.WriteLine(i+":" + resultOneArray[i]);
            }
             Console.ReadKey();
        }

 

以上只是实现的部分代码片段,如果看不懂,示例在文末,可下载。


最后放一张示例图:


QQ图片20220426221318.jpg


原文链接:点击这里,走你



目录
相关文章
|
4月前
|
C# 图形学 开发者
【Unity3D实例-功能-镜头】俯视角
本文介绍了Unity中常用的俯视角镜头实现方法,涵盖模型添加、角色Tag设置、摄像机脚本编写及测试运行,帮助开发者快速掌握俯视角在策略与模拟类游戏中的应用技巧。
329 0
抖音抢拍神器app, 直播间抢购神器,抢单加速器永久免费版
这是一款针对抖音直播间秒杀抢购的辅助软件源码,可帮助用户在多人同时抢购时提高成功率。功能包括自定义抢拍数量、速度及定时设置,通过模拟点击实现商品购买流程。
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
524 5
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy&lt;T&gt;` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
484 2
|
Python
【已解决】如何用正则提取小括号的内容
【已解决】如何用正则提取小括号的内容
385 0
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
987 0
|
存储 芯片 块存储
计算机组成原理(2)-----存储芯片与CPU的连接
计算机组成原理(2)-----存储芯片与CPU的连接
994 1
|
JSON iOS开发 数据格式
在 VScode 中设置快捷键快速添加注释(文件头部、文件函数)
在编写代码的过程中,为了增加代码的可读性和维护性,我们通常会添加注释来解释代码的作用和功能。为了提高效率,我们可以在 VScode 中设置快捷键,以便快速添加注释,包括文件头部和函数注释。下面是详细的设置步骤:
6827 1
在 VScode 中设置快捷键快速添加注释(文件头部、文件函数)
|
算法 网络协议 网络性能优化
网络QoS
网络QoS
2684 0
|
SQL 开发框架 .NET
在ASP.NET中使用ListView控件对数据进行显示、分页和排序
在ASP.NET中使用ListView控件对数据进行显示、分页和排序
在ASP.NET中使用ListView控件对数据进行显示、分页和排序