【问题标题】:how to create array with n number of bytes?如何创建具有 n 个字节的数组?
【发布时间】:2013-03-04 15:59:03
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么你认为 byte[] 在 32 位机器上会比 int[] 提供更好的性能?
  • 我没有,字节对于我想要存储的数字来说已经足够大了 :) 我认为它不会影响性能。
  • @JonSkeet 否,Enumerable.Range(1, n) 产生 n 元素。
  • @JeppeStigNielsen:Doh,Doh,Doh。我真笨。删除评论。
  • @user1933169:完全有可能使用byte 数组实际上会比使用int 数组,这取决于你用它做什么。听起来您正在大量进行微优化 - 您是否有任何证据表明您的这部分代码实际上是一个瓶颈?

标签: c# arrays byte enumerable


【解决方案1】:

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

byte[] digits = new byte[n];

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

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

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

【讨论】:

  • 好吧,看来我是当今世界上最愚蠢的人。谢谢楼主
  • 无需感到愚蠢。有时最明显的事情让我们望而却步!
  • 好吧,那我就更傻了。我ment,我如何用数字填充数组。范围从 1->n?
  • @user1933169 所以你的意思不是将数组元素初始化为1, 2, 3, 4, ...
  • 它不会在i == n 上失败,因为分配给digits[i-1]。不过,它看起来确实有点吓人。我的偏好是digits[i] = (byte)i+1;,并在for 循环测试中使用通常的i &lt; n,但也许这只是我。
【解决方案2】:

你可以这样做:

byte[] digits=new byte[2024];

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

    • 必须与@Jon 就微优化的可能性达成一致。除非出于某种原因它们必须是 8 位值(嗯,技术上是 CHAR_BIT 位值),否则您可能需要查看 intfast_t 等。至于性能,请注意uint_fast8_t 的典型定义是typedef unsigned int
    • @frasnian:我想你可能在这里错过了 C# 上下文......在这种情况下没有 intfast_t 等。
    • 啊,谢谢。我确实完全错过了。这就是周六早起会让你得到的:)
    【解决方案4】:

    如果你真的喜欢 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2022-01-18
      • 2020-03-17
      相关资源
      最近更新 更多