繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM