gpt4 book ai didi

c# - 将数组的一部分复制到列表的快速方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:47 25 4
gpt4 key购买 nike

C#的List <>具有一组CopyTo函数,这些函数将使用快速内存​​块副本将其内部数组的内容提取到另一个数组中。

有没有办法做到这一点呢?看起来像...

var buffer = new List<byte>();
buffer.AddRange(afewbytes);
buffer.AddFromArray(myArray, startIndex, countBytesToCopy);
buffer.AddRange(afewmorebytes);


由于我的List是List 的变体,因此我希望避免一个逐字节复制的循环。

最佳答案

如果集合实现了List<T>(IEnumerable<T>),则ICollection<T>.CopyTo构造函数将使用ICollection<T>,而byte[]会这样做。

如果您只想提取数组的一部分,那将无济于事,但是您可以创建自己的实现ByteArraySegmentICollection<byte>类,并使用CopyTo或其他方法实现Buffer.BlockCopy操作:

public class ByteArraySegment : ICollection<byte>
{
private readonly byte[] array;
private readonly int start;
private readonly int count;

public ByteArraySegment(...)
{
// Obvious code
}

public void CopyTo(byte[] target, int index)
{
Buffer.BlockCopy(array, start, target, index, count);
}

// Other ICollection<T> members
}


然后:

List<byte> bytes = new List<byte>(new ByteArraySegment(myArray, start, count));


(或使用具有相同优化的 AddRange。)

关于c# - 将数组的一部分复制到列表的快速方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23413068/

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