[英]Apply “new” to only one dimension of multi-dimensional array?
我有这个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覆盖。
这两个基本上是以同样的方式工作,程序功能明智吗?
你拥有的代码没有任何问题。 它甚至可能比创建新阵列更快。 但是如果你真的想要,你可以使用锯齿状数组:
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>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.