将两个或多个数组附加到单个主数组

时间:2017-01-30 11:18:10

标签: c# arrays append

我是C#编程的新手,我是从python迁移的。我想将两个或更多数组(确切的数字未知,取决于数据库条目)附加到单个数组中 就像python中的list.append方法一样。这里是我想要做的代码示例

int[] a = {1,2,3};
int[] b = {4,5,6};
int[] c = {7,8,9};
int[] d;

我不想一次添加所有数组。我需要有点像这样

// I know this not correct
d += a;
d += b;
d += c;

这是我想要的最终结果

d = {{1,2,3},{4,5,6},{7,8,9}};

这对你们来说太容易了但是我只是从c#开始。

4 个答案:

答案 0 :(得分:2)

好吧,如果您想要一个简单的 1D 数组,请尝试SelectMany

  int[] a = { 1, 2, 3 };
  int[] b = { 4, 5, 6 };
  int[] c = { 7, 8, 9 };

  // d == {1, 2, 3, 4, 5, 6, 7, 8, 9}
  int[] d = new[] { a, b, c } // initial jagged array
    .SelectMany(item => item) // flattened
    .ToArray();               // materialized as a array

如果你想要一个锯齿状的数组(数组数组

  // d == {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
  // notice the declaration - int[][] - array of arrays of int
  int[][] d = new[] { a, b, c };

如果您想要有条件地附加数组,而不是一次性,数组不是要为d选择的集合类型; List<int>List<int[]>会更好:

  // 1d array emulation
  List<int> d = new List<int>();
  ...
  d.AddRange(a);
  d.AddRange(b);
  d.AddRange(c); 

或者

  // jagged array emulation
  List<int[]> d = new List<int[]>();
  ...
  d.Add(a); //d.Add(a.ToArray()); if you want a copy of a  
  d.Add(b);
  d.Add(c);

答案 1 :(得分:0)

从您的代码看来,d不是一维数组,但它似乎是一个锯齿状数组(和数组数组)。如果是这样,你可以这样写:

int[][] d = new int[][] { a, b, c };

如果您想要将所有数组连接到新的d,可以使用:

int[] d = a.Concat(b).Concat(c).ToArray();

答案 2 :(得分:0)

var z = new int[x.Length + y.Length];
x.CopyTo(z, 0);
y.CopyTo(z, x.Length);

答案 3 :(得分:0)

您可以使用Array.Copy。它将一个Array中的一系列元素复制到另一个数组中。 Reference

int[] a = {1,2,3};
int[] b = {4,5,6};
int[] c = {7,8,9};

int[] combined = new int[a.Length + b.Length + c.Length];
Array.Copy(a, combined, a.Length);
Array.Copy(b, 0, combined, a.Length, b.Length);
Array.Copy(c, 0, combined, a.Length, b.Length, c.Length);