C#中int[][]与int[,]的比较

该文章已生成可运行项目,
一、定义

首先我们定义这样两个对象

int[,] arr1 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[][] arr2 = { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 }, new int[] { 7, 8, 9 } };
二、维数(秩)

然后编译上面的对象,看看值是怎样的
在这里插入图片描述 在这里插入图片描述
从上图中和定义 我们应该发现这种int[][]形式的,不应该叫做二维数字,只不过一维数组里包了一维数组,就是在套娃。

其实还有直接数据可以证明,在上述两个对象中有一个叫Rank的属性,可以获取其Array,即维数
在这里插入图片描述
看看就知道了

int rank1 = arr1.Rank;
int rank2 = arr2.Rank;

结果如下
在这里插入图片描述
很明显了,只有int[,]才是二维数组,int[][]还是一维的。

三、取值赋值

这个两者是差不多的

int num1 = arr1[1, 2];
int num2 = arr2[1][2];

arr1[1, 2] = 10;
arr2[2][2] = 10;
四、获取数组长度

对于Array我们有GetLength(int dimension)可以获取长度,其中dimension表示维数
int[,]:

int len1 = arr1.GetLength(0);     //len1 = 3
int len11 = arr1.GetLength(1);    //len11 = 3 

但是因为int[][]是一维的,所以我们使用上面的方式

int len2 = arr2.GetLength(0);     //len2 = 3
int len22 = arr2.GetLength(1);    //越界 

会抛出IndexOutOfRangeException:“索引超出了数组界限的异常,这很容易想到。
既然是一维的,我们直接获取其Length属性就可以了

//第一层数组长度
int len2 = arr2.Length;     //len2 = 3
//因为第一层中对象也是数组,所以取第二层数字长度获取具体的Length
int len22 = arr2[0].Length;    //len22 = 3
五、遍历

有了维数,遍历就轻松了

///int[,]
for (int i = 0; i < arr1.GetLength(0); i++)
{
    for (int j = 0; j < arr1.GetLength(1); j++)
    {
        //To Do
    }
}

///int[][]
for (int i = 0; i < arr1.Length; i++)
{
    for (int j = 0; j < arr1[0].Length; j++)
    {
        //To Do
    }
}
六、初始化数据

假设初始化数据
[ [1,1,..*n...,1,1], [2,2,..*n...,2,2], [3,3,..*n...,3,3],...*m.... ,[m-1,m-1,..*n...,m-1,m-1], [m,m,..*n...,m,m] ]
int[,]

public int[,] InitArray(int m = 0, int n = 0)
{
	int[, ] arr = new int[m, n];
	for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            arr[i, j] = i + 1;
        }
    }
    return arr;
}

int[][]

public int[,] InitArray(int m = 0, int n = 0)
{
	int[][] arr = new int[m][];
	for (int i = 0; i < m; i++)
    {
        int[] curArr = new int[n];
        for (int j = 0; j < n; j++)
        {
            arr[j] = i + 1;
        }
        arr[i] = curArr;
    }
    return arr;
}
本文章已经生成可运行项目
C# 中,将整数类型(如 `int`)转换为浮点类型(如 `float` 或 `double`)有多种方法。以下是一些常用的方法及其实现方式: ### 使用强制类型转换 可以通过强制类型转换的方式直接将 `int` 转换为 `float`。这种转换是隐式的,不会丢失数据,因为 `float` 的表示范围大于 `int`。 ```csharp int intValue = 10; float floatValue = (float)intValue; // 显式转换 ``` 这种方式适用于所有数值类型的转换,但需要注意的是,在某些情况下可能会导致精度损失,尽管在 `int` 到 `float` 的转换中通常不会出现这种情况 [^1]。 ### 使用 Convert 类 `Convert` 类提供了 `ToSingle()` 方法用于将 `int` 转换为 `float`。这种方法可以处理更多的数据类型,并且在处理可空类型时更为安全。 ```csharp int intValue = 20; float floatValue = Convert.ToSingle(intValue); ``` 此方法适用于需要更广泛的类型转换场景,尤其是在处理数据库或用户输入等不确定数据类型的情况下 [^1]。 ### 使用 Parse 和 TryParse 方法 虽然 `Parse` 和 `TryParse` 主要用于字符串到数值类型的转换,但如果有一个字符串形式的整数,也可以通过这些方法将其转换为浮点数。 ```csharp string strValue = "30"; if (float.TryParse(strValue, out float floatValue)) { Console.WriteLine(floatValue); } else { Console.WriteLine("转换失败"); } ``` 这种方法特别适合处理来自外部源的数据,例如用户输入或文件读取 [^1]。 ### 使用数学运算 还可以通过简单的数学运算来实现转换,例如将 `int` 值除以一个整数或将 `int` 值 `1.0f` 相乘。 ```csharp int intValue = 40; float floatValue = intValue * 1.0f; ``` 这种方式利用了 C# 的隐式类型转换规则,当表达式中包含不同类型的变量时,编译器会自动进行类型转换 [^1]。 ### 使用隐式转换 C# 支持隐式类型转换,这意味着你可以直接将 `int` 分配给 `float` 变量而无需显式转换。 ```csharp int intValue = 50; float floatValue = intValue; // 隐式转换 ``` 这种转换方式简洁明了,适用于大多数基本数据类型的转换 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值