【问题标题】:C# How to get child array in a 2Demensional Array?C#如何在二维数组中获取子数组?
【发布时间】:2020-08-14 20:50:19
【问题描述】:

我习惯使用其他语言的数组,但我是 C# 新手,我想知道如何获取二维数组的子数组。

这是我尝试过的:

int[,] arr = new int[4, 4];
int[] childArr = arr[0];

我的错误是“索引数量错误1' inside [], expected 2”。问题是,我想要子数组,而不是子数组中的东西,我认为错误告诉我要处理第二个索引。

感谢您的帮助。

【问题讨论】:

  • 你能定义你所说的“子数组”是什么意思吗?您是否正在寻找类似this
  • 可以将您的二维数组实现为jagged array (int[][] arr = new int[4][];)。然后你可以用你想要的方式访问它:int[] childArr = arr[0]。但要小心,因为这种结构并不强制所有“子”数组具有相同的长度(这就是术语“锯齿状”的来源)。 .NET 针对一维数组进行了优化,因此根据您的使用情况,锯齿状数组的处理可能比二维数组执行得更快。但二维数组更易于读取、初始化和管理。

标签: c# arrays


【解决方案1】:

二维数组不包含访问行或列的方法。你将不得不迭代。可以使用extension methods获取类似于Math.NET's Matrix<T>的API

例如:

public static IEnumerable<T> Row<T>(this T[,] arr, int row)
{
    for (var i = 0; i < arr.GetLength(0); i++)
    {
        yield return arr[i, row];
    }
}

public static IEnumerable<T> Column<T>(this T[,] arr, int col)
{
    for (var i = 0; i < arr.GetLength(1); i++)
    {
        yield return arr[col, i];
    }
}

int[,] myArray;

...

int[] row0 = myArray.Row(0).ToArray();
int[] col0 = myArray.Column(0).ToArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多