一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
今天与同事讨论一个问题的时候,聊到,一维数组和二维数组是否可以转换的问题,我这里是持肯定态度的,作为一个程序员,这些年开发都是使用高级语言来开发,对这些底层的东西还不是很了解。
但是,我觉得,计算机总归是二进制,无论是什么数据,到最后的底层就是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();
}
以上只是实现的部分代码片段,如果看不懂,示例在文末,可下载。
最后放一张示例图:
原文链接:点击这里,走你
有好的建议,请在下方输入你的评论。
欢迎访问个人博客 guanchao.site