1

如何byte[] digits;用 n 个字节创建?

我知道我可以做到Enumerable.Range(1, n).ToArray();,但这会创建一个 int[]。有没有办法创建一个字节[]?

我的首要任务是快速的表现。牢记这一点,是否有更快的方法(代码稍多)可以创建它?

4

4 回答 4

9

如果你真的喜欢 LINQ,你可以这样做

byte[] digits = Enumerable.Range(1, n).Select(i => (byte)i).ToArray();

还有可能

byte[] digits = new byte[n];
for (byte b = 1; b <= n; ++b)
    digits[b - 1] = b;
于 2013-03-15T19:50:40.553 回答
7

只创建一个字节数组实例有什么问题?

byte[] digits = new byte[n];

如果您想使用从 1 到 n 的值进行初始化,那么我认为:

for(int i = 1; i <= n; i++)
   digits[i-1] = (byte)i; // index is 0-based

还将尽快为您提供所需的结果。当然,其中 n < 256!

于 2013-03-15T19:42:23.397 回答
1

要创建一个字节数组并用字节 1 到 n 填充它,您只需创建数组并使用循环:

byte[] digits = new byte[n];
for (int i = 0; i < n; i++)
{
    digits[i] = (byte) (i + 1);
}

请注意,thendigits[0]将是 1 等...这是您想要的吗?

但是,如果您将这些值存储为字节的原因纯粹是为了性能,那么您可能正在进行微优化。你的绩效目标是什么?如果您使用 anint[]代替,那会错过它们吗?该数据的自然类型是什么?你用它做什么?

于 2013-03-15T19:50:02.930 回答
0

你可以这样做:

byte[] digits=new byte[2024];
于 2013-03-15T19:43:10.667 回答