【问题标题】:Store for loop value in array将for循环值存储在数组中
【发布时间】:2014-04-23 05:44:58
【问题描述】:

我想编写一个函数,它返回一个数组,该数组包含一个 for 循环,该循环枚举一些我想将它们存储到数组中的值。我试过这个

public int[] a()
{
   int[] b=new int []{};

   for(int i=0;i<10;i++) 
   {
       b[i]=i   {Index out of range exception comes}
   } 

   return b;
} 

由于性能问题,我不喜欢使用enumerable.range()。 我想保持数组大小为空。

【问题讨论】:

  • 什么语言? (另外,您的键盘上的&lt;tab&gt; 键是否损坏或丢失?)
  • 您认为Enumerable.Range 有什么性能问题,为什么?如果要在其中存储任何内容,则不能“将数组大小保持为空”,这是没有意义的。
  • 好的有没有办法将for循环值存储在数组中
  • for 循环是语句而不是表达式,因此没有值
  • Enumerable.Range 返回一个 IEnumerable,直到您开始对其进行迭代(或调用 ToArray 或类似方法)才会对其进行评估。这有点像“在数组中存储for循环”。你可以说var a = Enumerable.Range(0,100000),当然只会使用几个字节的内存,直到你调用ToArray()

标签: c# arrays for-loop


【解决方案1】:

在您的情况下,您需要一个包含 10 个元素的数组。在某些语言中,您可以做您想做的事情(JavaScript 就是其中之一)。假设您可以在 C# 中扩展一个数组,然后您的代码将在循环的每次迭代中一次为一个元素分配空间,从而分配 10 个元素。理想情况下,这与一次性分配 10 个元素一样快。 但是,这可能不太可能,并且永远不会比请求一次分配所有这些更快。所以换句话说,不简单地一次性分配所有 10 个元素并没有发现性能提升

public int[] a()
{
   int[] b=new int [10];

   for(int i=0;i<b.Length;i++) 
   {
       b[i]=i;
   } 
   return b;
}

然而,一种更具可读性的方法是

public int[] a()
{
    return Enumerable.Range(0,10).ToArray();
}

【讨论】:

    【解决方案2】:

    int[] b=new int []{}; 表示您的数组b[] 的长度为零。您在b[i]=i 上得到一个索引超出范围异常,因为没有元素。您实际上正在执行b[0]=0,但元素 0 不存在。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 2022-08-03
      • 2013-12-07
      • 2015-08-25
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      相关资源
      最近更新 更多