我有这个 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/