仅将“new”应用于多维数组的一维?

时间:2018-04-18 15:29:19

标签: 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的数组的“新”实例,并刷新数组。有点像重置它。

现在,有人告诉我写一个新的程序做同样的事情,除了现在有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;
}

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

这两个基本上是以同样的方式工作吗,程序功能明智吗?

1 个答案:

答案 0 :(得分:4)

您拥有的代码没有任何问题。它甚至可能比创建新阵列更快。但是如果你真的想要,你可以使用锯齿状阵列:

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,其中数组中的每个项目都是类中的命名字段(我们只需要调用它{ {1}}现在)。然后你最终得到这样的东西:

MyClass