gpt4 book ai didi

c# - 将 List 转换为 double[n,1]

转载 作者:行者123 更新时间:2023-12-04 02:37:20 25 4
gpt4 key购买 nike

我需要将一个长度为 n 的大列表转换为一个 double[n,1] 数组。进行转换的最快方法是什么?

对于进一步的背景,这是传递到一组 Excel 对象的 Range.Value 中,这需要一个二维数组。

最佳答案

我写这篇文章的前提是您真的想要最有效的方法来做到这一点。极致性能几乎总是伴随着权衡,通常是代码可读性。

如评论所述,我仍然可以大幅优化其中的一部分,但我不想在第一次通过时就使用动态方法。

const int TEST_SIZE = 100 * 1000;
//Test data setup
var list = new List<double>();
for (int i = 0; i < TEST_SIZE; i++)
list.Add(i);
//Grab the list's underlying array, which is not public
//This can be made MUCH faster with dynamic methods if you want me to optimize
var underlying = (double[])typeof(List<double>)
.GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(list);
//We need the actual length of the list because there can be extra space in the array
//Do NOT use "underlying.Length"
int underlyingLength = list.Count;
//Benchmark it
var sw = Stopwatch.StartNew();
var twodarray = new double[underlyingLength, 1];
Buffer.BlockCopy(underlying, 0, twodarray, 0, underlyingLength * sizeof(double));
var elapsed = sw.Elapsed;
Console.WriteLine($"Elapsed: {elapsed}");

输出:

Elapsed: 00:00:00.0001998

使用的硬件:

AMD 锐龙 7 3800X @ 3.9 Ghz32GB DDR4 3200 内存

关于c# - 将 List<double> 转换为 double[n,1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61122563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com