如何在C#中添加1d到2d数组的数据

时间:2014-12-17 19:52:57

标签: c# arrays linq list jagged-arrays

如何将数组添加到另一个2D数组?例如

//change this
array2d = { {1,2,3}, {4,5,6} };
//to this
array2d = { {1,2,3}, {4,5,6}, {7,8,9} };
//by adding
array1d = {7,8,9};

除了创建一个比旧数组更大的数组之外还有更好的方法,然后将旧数组复制到数组中吗?

3 个答案:

答案 0 :(得分:2)

除非你有理由不这样做,否则我会推荐List<List<int>>这样的事情。

它的代码可能如下所示:

List<List<int>> my2dList = new List<List<int>>()
{
    new List<int>()
    {
        1,
        2,
        3
    },
    new List<int>()
    {
        4,
        5,
        6
    },
};
my2dList.Add(new List<int>(){7,8,9});

或者,如果您确实要将每列限制为三个长度,请考虑使用具有不可变大小的内部结构(大小为3的数组等)

答案 1 :(得分:0)

似乎您可能想要使用不同的数据结构,数组列表会使这更容易。

答案 2 :(得分:0)

@VP发布的代码段的扩展版本。包括从List(List&gt;到使用Linq的Jagged数组:

)的反向转换
    // 2d array to List
    List<List<int>> ar2list = new List<List<int>>()
    {
        new List<int>() { 1, 2, 3 },
        new List<int>() { 4, 5, 6 },
    };

    // adding item to List
    ar2list.Add(new List<int>() { 7, 8, 9 });

    // List to Jagged array conversion using Linq
    int[][] _arrConcat = ar2list.Select(Enumerable.ToArray).ToArray();

最后,与OP请求的特定用例相关,int[][]可以通过简单的int[,]循环轻松转换为for

array2d = new int[_arrConcat.Length, 3];
for (int i = 0; i<_arrConcat.Length; i++)
{
    for (int j = 0; j < 3; j++)
    {
        array2d[i, j] = _arrConcat[i][j];
    }
}

其中array2d是添加索引/内容的原始数组。

希望这会有所帮助。最好的问候,