包含数组到锯齿数组的类的数组

本文关键字:数组 包含 | 更新日期: 2023-09-27 18:11:38

我有一个像这样封装数组的类:

public class Data
{
    public double[] buffer  = new double[10];
}

然后我有一个Data对象的数组:

Data[] arrayOfData  = new Data[10];

从所有arrayOfData对象中的所有缓冲区中获得锯齿数组double[][]的最有效方法是什么?

包含数组到锯齿数组的类的数组

您可以在这里简单地使用for循环。只有两行代码:

Data[] arrayOfData  = new Data[10];
double[][] allBuffers = new double[arrayOfData.Length][];
for(int i = 0; i < arrayOfData.Length; i++) allBuffers[i] = arrayOfData[i].buffer;

或者如果你喜欢用LINQ:

double[][] allBuffers = arrayOfData.Select(a => a.buffer).ToArray();

然而,这行代码的问题是LINQ有一组接口IEnumerable<T>的扩展方法,因此它使用foreach循环,比for慢得多,广泛用于迭代集合而不是数组。

Linq是一个选项

double[][] result = arrayOfData.Where(x => x != null).Select(x => x.buffer).ToArray();

UPDATE:添加了一个null检查,因为Data可以是null,但double不能