C# 向数组追加列

C# 向数组追加列,c#,.net-4.0,C#,.net 4.0,这听起来可能是一个根本性的问题,但我完全无法找到一个对我的应用程序性能没有影响的高效解决方案 我有一个动态2D数组,在初始化时我不知道它的大小 object[,] 2d = GetData(); 然后我有一个for循环,每个循环返回一维数组,其行数与二维数组相同 foreach (var col in externalData) { // here append to 2d array } 我是否必须为每个循环创建一个新数组并复制全部?还是有更快的解决方案? 我相信有一个简单的解决办法,

这听起来可能是一个根本性的问题,但我完全无法找到一个对我的应用程序性能没有影响的高效解决方案

我有一个动态2D数组,在初始化时我不知道它的大小

object[,] 2d = GetData();
然后我有一个for循环,每个循环返回一维数组,其行数与二维数组相同

foreach (var col in externalData)
{
  // here append to 2d array
}
我是否必须为每个循环创建一个新数组并复制全部?还是有更快的解决方案? 我相信有一个简单的解决办法,我想不出来

编辑:

例如,二维数组的值为

1 2 3
4 5 6
4 5 5
1 1 1
那么让我们假设for循环生成2个数组

6
5
4
2

现在我想将for循环的2个结果附加到2D数组中 所以最后的结果应该是

1 2 3 6 4
4 5 6 5 5
4 5 5 4 2
1 1 1 2 2

同样重要的是,最终结果应该是
对象[,]的类型。

通常使用锯齿状数组而不是多维数组,但是

因为您不知道初始化时的大小,所以不要使用数组

以你为例

var twoD = new List<List<int>>
    {
       { 1, 2, 3 }
       { 4, 5, 6 }
       { 4, 5, 5 }
       { 1, 1, 1 }
    }

然后,当你完成操作后,你可以使用

object[,] ToMultiObject<T>(this IList<IList<T>> source)
{
    var x = source.Max(r => r.Count);
    var y = source.Count;

    var result = new object[x, y];
    for (var i = 0, i < source.Count, i++)
    {
        for (var j = 0, j < source[i].Count, j++)
        {
            result[j, i] = source[i][j];
        }
    }

    return result;
}
object[,]ToMultiObject(此IList源代码)
{
var x=source.Max(r=>r.Count);
var y=source.Count;
var结果=新对象[x,y];
对于(var i=0,i
一维数组与二维数组的关系如何,请用插图显示数据结构您的情况尚不清楚,但如果您想向集合中添加对象,我建议您使用数组而不是数组。名单?。。大概或者为您的数据创建一个类并创建一个列表,这取决于您需要什么。重要的是,通过添加新的“列表”,最终结果应为对象类型[,]是否添加新行,而不是column@Maro,你错了。
void AddColumn(this List<List<T>> source, IList<T> column)
{
   if (column is null)
   {
       throw new ArgumentNullException("column");
   }

   if (column.Count != source.Count)
   {
       throw new ArgumentException("column");
   }

   for(var i = 0; i < source.Count; i++)
   {
       source[i].Add(column[i]);
   }
}
twoD.AddColumn(new[]
    {
        6,
        5,
        4,
        2
    });
object[,] ToMultiObject<T>(this IList<IList<T>> source)
{
    var x = source.Max(r => r.Count);
    var y = source.Count;

    var result = new object[x, y];
    for (var i = 0, i < source.Count, i++)
    {
        for (var j = 0, j < source[i].Count, j++)
        {
            result[j, i] = source[i][j];
        }
    }

    return result;
}