我有这个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覆盖。
这两个基本上是以同样的方式工作吗,程序功能明智吗?
答案 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