gpt4 book ai didi

c# - 从现有数组的一部分创建新数组的好方法是什么?

转载 作者:行者123 更新时间:2023-12-02 19:23:01 25 4
gpt4 key购买 nike

给定byte[]缓冲区我想从子数组创建一个新数组。方法签名可能看起来像 byte[] SubArray(byte[] buffer, int start, int length) 但我可能宁愿只拥有一个简洁的 1-liner 而不是一个方法。

这是一个漂亮整洁的 LINQ 版本,但感觉这可能不是很有效。是否有一个标准库方法可以执行此操作,或者我必须创建一个新数组然后复制到其中?

        var subArray = buffer.Skip(start).Take(length).ToArray();

最佳答案

没有有效的方法来创建新的数组,但是,还有其他方法可以查看数组的部分数组:

  • Memory<byte>/ReadOnlyMemory<byte> - 实际上这是一个“跨度提供者”
  • Span<byte>/ReadOnlySpan<byte> - 任何类型的原始内存(包括数组、内部指针和非托管内存)的抽象 View ,但只能保存在堆栈上 - 如果需要存储它,则需要“内存”,而不是“跨度”)
  • ArraySegment<byte> - 明确地仅描述向量/偏移/计数

以上所有内容都有采用 byte[] 的构造函数和一个偏移/计数对。

这些都不需要分配/复制。

如果你真的想要一个 byte[] ,那么:

var newArray = new byte[length];
Buffer.BlockCopy(oldArray, start, newArray, 0, length);

关于c# - 从现有数组的一部分创建新数组的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62796112/

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