c# - 仅将 "new"应用于多维数组的一维?

标签 c# arrays

我有这个 C# 程序,它有以下代码:

/*10 data for one peprson */
private int[] data = new int[10];
private void SomeMethod()
{   
    /*More code*/
    this.data = new int[10];
    /*More code*/
}

这个程序在事件发生时调用这个方法,每次发生时,这个一维数组都会得到一个大小为 10 的数组的"new"实例,并刷新数组。有点像重置它。

现在,我被告知要编写一个新程序来做同样的事情,只是现在有 5 个人。所以我创建了一个二维数组,如

private int[,] data = new int[5, 10];

这将能够为 5 个人中的每人存储 10 个数据。 现在我不知道如何从这个二维数组中只刷新/重置一个人的数据。我试过了

private void SomeMethod(int index) /*index 0 - 4 for each of the 5 people*/
{
     this.data[index] = new int[10];
}

但这显然行不通,而且我收到一条错误消息,提示我缺少维度。有没有办法做到这一点? 暂时我在用

private void SomeMethod(int index) /*index 0 - 4 for each of the 5 people*/
{
     for(int i=0; i<10; i++)
         this.data[index, i] = 0;
}

当我用原始代码测试它时,我注意到每次它得到一个"new"实例时,它都会将 0 分配给数组。现在的区别在于,原始实例正在引用没有数据的新实例(因此为 0?),而重写的实例正在用 0 覆盖。

这两者在程序功能方面是否基本上以相同的方式工作?

最佳答案

您的代码没有任何问题。它甚至可能比创建新数组更快。但如果你真的想,你可以改用锯齿状数组:

private int[][] data = new int[5][];

//...

private void SomeMethod(int index) /*index 0 - 4 for each of the 5 people*/
{
     this.data[index] = new int[10];
}

但是数组看起来很奇怪。 List<T>可能会更好:

private List<int[]> data = new List<int[]>();

然后您可以在哪里使用 .Add()获取新记录时的方法,并使用 Count属性以了解您添加了多少。

此外,通常会发现 int[10]数组实际上是命名字段的替代品,其中数组中的每个位置都有意义。在那种情况下,通常构建一个class会更好。对于此数据,数组中的每个项目都是类中的一个命名字段(我们现在将其称为 MyClass)。然后你会得到这样的结果:

private List<MyClass> data = new List<MyClass>();

关于c# - 仅将 "new"应用于多维数组的一维?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49903599/

相关文章:

c# - 如何在不将该颜色应用于每个子控件的情况下更改 GroupBox 的 ForeColor?

javascript - 如何将动态添加的输入字段关联到父元素/id?

即使未使用数组,定义空数组是否会导致未定义的行为?

c# - 如何将接口(interface)作为参数传递给 C# 方法

c# - 如何在多线程中从TargetInitationException中优雅地恢复?

c# - 从soapxml获取XML子节点值

c# - 谁能一眼就告诉我为什么这个 Action 这么慢?

c++ - 创建动态集合错误

C 代码神秘地改变结构的值(有趣的神秘代码行为)

c++ - std::array 实例化错误