【问题标题】:Array concatenation in C#C#中的数组连接
【发布时间】:2010-05-07 12:54:16
【问题描述】:
  1. 如何在 C# 中巧妙地用两个(或更多)其他数组初始化一个数组?

    double[] d1 = new double[5];
    double[] d2 = new double[3];
    double[] dTotal = new double[8]; // I need this to be {d1 then d2}
    
  2. 另一个问题:如何有效地连接 C# 数组?

【问题讨论】:

标签: c# arrays initialization concatenation array-initialization


【解决方案1】:

你可以使用CopyTo:

double[] d1 = new double[5];
double[] d2 = new double[3];
double[] dTotal = new double[d1.Length + d2.Length];

d1.CopyTo(dTotal, 0);
d2.CopyTo(dTotal, d1.Length);

【讨论】:

  • msdn有点不清楚,但是index参数指定了目标数组中的索引。
  • 我相信你需要 d1.length - 1
  • 你是对的;我误解了。对不起。 @Rubys:不,你没有。
  • 首先我将 5 个双打从 d1 复制到 dTotal。然后我从索引 5 开始将 d2 复制到 dTotal。如果我使用 d1.Lenght - 1,我将从索引 4 开始,我将丢失 d1 的最后一个值。
【解决方案2】:
var dTotal = d1.Concat(d2).ToArray();

您可以先创建 dTotal,然后使用 Array.Copy 复制两个输入,从而使其“更好”。

【讨论】:

  • 这对于大型数组来说效率很低。
  • @SLaks:这就是为什么我添加了一些额外的位,但即使对于中等大小的数组(最多 10000 个元素),您可能甚至都不会注意到差异。如果两者都是数组,则 Enumerable 可能会为Concat 提供快速选项(必须查看源代码以确认)。更新:它没有任何快速的选项。
【解决方案3】:

你需要拨打Array.Copy,像这样:

double[] d1 = new double[5];
double[] d2 = new double[3];
double[] dTotal = new double[d1.length + d2.length];

Array.Copy(d1, 0, dTotal, 0, d1.Length);
Array.Copy(d2, 0, dTotal, d1.Length, d2.Length);

【讨论】:

    【解决方案4】:
    using System.Linq;
    
    int[] array1 = { 1, 3, 5 };
    int[] array2 = { 0, 2, 4 };
    
    // Concat array1 and array2.
    var result1 = array1.Concat(array2).ToArray();
    

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 2021-09-24
      • 2011-01-14
      • 2014-08-06
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多