【问题标题】:how to inset a new array to my jagged array如何在我的锯齿状数组中插入一个新数组
【发布时间】:2012-07-30 19:23:45
【问题描述】:

你好,我会非常感谢任何帮助。

好吧,让我们看看,首先我已经声明了一个像这样的锯齿状数组和下一个代码

int n=1, m=3,p=0;

int[][] jag_array =new[n];

现在我的锯齿状数组内部将有 1 个数组,接下来你必须像这样填充数组:

car=2;
do
     {
     jag_array[p]= new double[car];
     for (int t = 0; t < carac; t++)
          {
           jag_array[p][t] = variableX;
          }
     p=p+1
     }
 while(p==0)

现在我的锯齿状数组看起来像这样(也为此示例插入一些数据):

jag_array[0][0]=4
jag_array[0][1]=2

现在我的问题是,如果我声明,我如何插入一个新数组而不会丢失我的 previos 数据

jag_array[p+1]= new double[car];

我会丢失上一个中的数据,我希望看起来像这样:

jag_array[0][0]=4
jag_array[0][1]=2
jag_array[1][0]=5
jag_array[1][1]=6

我没有从一开始就声明 2 个数组的原因是因为我不知道我要使用多少个它可能只有 1 个或 20 个,并且每次我必须创建一个新数组而不会丢失以前的数据已经填满了,谢谢大家的关注,

【问题讨论】:

  • 有什么理由不能使用List&lt;int[]&gt;
  • @recursive list 不会为我的程序的目的工作这是原因

标签: c# jagged-arrays


【解决方案1】:

数组的大小,一旦创建,根据定义是不变的。如果您需要可变数量的元素,请使用 List&lt;T&gt; - 在您的情况下,可能是 List&lt;int[]&gt;

唯一的替代解决方案是创建一个具有新大小的新数组(并将其分配给您的 jag_array 变量)并将旧数组中的所有先前元素复制到新数组中。当您可以只使用List&lt;T&gt; 时,这是不必要的复杂代码,但如果您因任何原因不能使用List&lt;T&gt;,这里是一个示例:

// increase the length of jag_array by one
var old_jag_array = jag_array; // store a reference to the smaller array
jag_array = new int[old_jag_array.Length + 1][]; // create the new, larger array
for (int i = 0; i < old_jag_array.Length; i++) {
    jag_array[i] = old_jag_array[i]; // copy the existing elements into the new array
}
jag_array[jag_array.Length - 1] = ... // insert new value here

【讨论】:

  • @Daniel:你这是什么意思?在 C# 中,数组是一种引用类型,因此数组数组已经可以说是指向数组的指针数组了。
  • 是的,起初我以为这是一个 c++ 问题。并不是说我真的会在 C++ 中推荐它。
  • 这是真的吗? int[][] 是 c# 中的“数组数组”而不是二维数组吗?这些是具有非常不同属性的不同事物。
  • @Daniel:是的,这是真的。在 C# 中,二维数组将写为int[,],而int[][] 是数组数组。
  • @JUAN:从你到目前为止告诉我们的情况来看,List&lt;T&gt; 不应该工作的原因并不明显,所以显然没有足够的信息来告诉你是什么 i> 寻找。请扩展您的问题以使其更清楚:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2019-06-12
相关资源
最近更新 更多