如何在 C# 中访问和重新格式化交错数组
本文关键字:格式化 数组 访问 | 更新日期: 2023-09-27 18:34:27
>我在 c# 中有 2D 数组,如下所示:
int[][] 2darray = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
我怎样才能得到一列作为普通数组,比如
int[] array = 2darray[1][]; //example, not working
并有
int[] array = {3,4};
?谢谢。
代码无法编译的原因有多种
这样它的工作原理:
int[][] array2d = { new[]{ 1, 2 }, new[]{ 3, 4 }, new[]{ 5, 6 }, new[]{ 7, 8 } };
int[] array = array2d[0];
问题:
-
2darray
不是有效的变量名 - 索引错误
- 原始数组的初始化错误
编辑:如 @heltonbiker 所述,如果您需要第一列的所有元素,则可以使用以下命令:
int[] col = array2d.Select(row => row[0]).ToArray();
对于具有两列四行的数组,可以通过以下方式使用 LINQ:
using System.Linq;
first_column = _2darray.Select(row => row[0]).ToArray();
请注意,更改第一个或第二个数组不会更改另一个数组。
您在 C# 中混淆了交错数组和多维数组。虽然它们相似,但略有不同。交错数组中的行可以具有不同数量的元素,而在 2D 数组中,它们的长度相同。因此,在使用交错数组时,您需要记住为缺少的列元素编写处理。我在下面编写了一个示例控制台应用程序来展示它们的工作原理 - 它使用 0 作为缺失元素的替代品,但您可以抛出错误等:
using System.Collections.Generic;
namespace JaggedArrayExample
{
class Program
{
static void Main(string[] args)
{
//jagged array declaration
int[][] array1;
//jagged array declaration and assignment
var array2 = new int[][] {
new int[] { 1, 2 },
new int[] { 3, 4 },
new int[] { 5, 6 },
new int[] { 7, 8 }
};
//2D-array declaration
int[,] array3;
//2D-array declaration and assignment (implicit bounds)
var array4 = new int[,] {{1, 2}, {3, 4}, {5, 6}, {7, 8}};
//2D-array declaration and assignment (explicit bounds)
var array5 = new int[4, 2] {{1, 2}, {3, 4}, {5, 6}, {7, 8}};
//get rows and columns at index
var r = GetRow(array2, 1); //second row {3,4}
var c = GetColumn(array2, 1); //second column {2,4,6,8}
}
private static int[] GetRow(int[][] array, int index)
{
return array[index]; //retrieving the row is simple
}
private static int[] GetColumn(int[][] array, int index)
{
//but things get more interesting with columns
//especially if jagged arrays are involved
var retValue = new List<int>();
foreach (int[] r in array)
{
int ub = r.GetUpperBound(0);
if (ub >= index) //index within bounds
{
retValue.Add(r[index]);
}
else //index outside of bounds
{
retValue.Add(0); //default value?
//or you can throw an error
}
}
return retValue.ToArray();
}
}
}
试试这个,它应该可以工作
int[] array = array2d[1];
将变量的名称更改为array2d
,变量不能以数字开头,变量可以以字母或下划线开头。