39

我喜欢创建一个int[]长度X并用 [0,1,2....X] 赋值

例如

public int[] CreateAA(int X){}

int[] AA = CreateAA(9) => [0,1,2,3,4,5,6,7,8,9]

有什么简单的方法吗?或者必须循环和初始化值

4

6 回答 6

85

您可以利用 IEnumerable 的功能。

int[] arr = Enumerable.Range(0, X+1).ToArray();

这将为您创建一个 IEnumerable List 并.ToArray()满足您的 int 数组需求。

因此,在您的情况下,对于 X=9,它将为[0,1,2,3,4,5,6,7,8,9](根据需要)生成数组

于 2012-05-21T08:36:19.897 回答
7

使用Enumerable.Range(0, 10).ToArray()非常简洁,但是如果你想创建一个非常大的数组,ToArray扩展方法将不得不将数字收集到一个必须多次重新分配的缓冲区中。在每次重新分配时,缓冲区的内容都会复制到新的更大的缓冲区。.NET 使用的策略是在每次重新分配时缓冲区的大小加倍(并且初始缓冲区有四个项目)。

因此,如果您想避免缓冲区的多次重新分配,您需要提前创建数组:

int[] aa = new int[10];
for (var i = 0; i < aa.Length; i += 1)
  aa[i] = i;

这是初始化数组的最有效方式。

但是,如果您需要一个包含 100,000,000 个连续数字的数组,那么您应该考虑一种不必将所有数字都保存在数组中的设计,以避免内存需求的影响。IEnumerable<int>为此目的非常有用,因为您不必分配整个序列,而是可以在迭代时生成它,而这正是Enumerable.Range它所做的。因此,首先避免连续数字的数组可能比考虑如何创建它更好。

于 2012-05-21T08:57:28.787 回答
6

为什么要在已经存在的情况下创建一个功能。

对于此特定示例,请使用

int[] AA = Enumerable.Range(0, 10).ToArray();

在哪里0 is the starting value10 (X + 1) is the length of array

所以一个通用的适用于所有人

int[] AA = Enumerable.Range(0, X + 1).ToArray();
于 2012-05-21T08:35:39.890 回答
2

初始化试试这个

int x = 10;
Enumerable.Range(0, x)
          .Select((v, i) => v + i).ToArray();
于 2012-05-21T09:03:30.123 回答
2

带函数和循环:

static int[] f(int X)
{
    int[] a = new int[X+1];
    for(int i = 0; i < a.Length; i++)
        a[i] = i;
    return a;
}
于 2012-05-21T08:40:31.500 回答
1

为了完整起见,这里有一个创建数组的函数。

CreateArray(0, 9)我通过设置最小值和最大值的参数(即返回值)使其更加通用{0,1,2,3,4,5,6,7,8,9}

static int[] CreateArray(int min, int max) {
  int[] a = new int[max - min + 1];
  for (int i = 0; i < a.Length; i++) {
    a[i] = min + i;
  }
  return a;
}
于 2012-05-21T08:50:50.310 回答