1

I want to create a new array. Let's say

int[] clickNum = new int[800];

Then I want to do something like clickNum = 2, which would make all array elements starting from clickNum[0] to clickNum[800], set to 2. I know there's a way to do it by using a loop; but what I am after is just a function or a method to do it.

4

4 回答 4

7

我想你可以Enumerable.Repeat在初始化数组时使用:

int[] clickNum = Enumerable.Repeat(2, 800).ToArray();

它当然会更慢,但除非你要启动数百万个元素,否则会很好

我的机器上的一个快速基准测试表明,使用for循环初始化 1,000,000 个元素需要2ms,但使用Enumerable.Repeattake 9ms

此页面表明它可能会慢 20 倍。

于 2012-05-26T23:16:54.387 回答
5

我认为没有任何内置函数可以填充现有数组/列表。如果您需要在几个地方进行操作,您可以为此编写一个简单的辅助方法:

static void Fill<T>(IList<T> arrayOrList, T value)
{
    for (int i = arrayOrList.Count - 1; i >= 0; i--)
    {
        arrayOrList[i] = value;
    }
}
于 2012-05-26T23:24:09.173 回答
1

我猜您正在寻找您创建的函数,但您没有时间输入它。因此,如果您想在一行中使用它,请尝试:

for(int i = 0; i < clickNum.Length; i++, clickNum[i] = 2);
于 2012-05-26T23:42:16.637 回答
1

如果您正在处理非常大的数组并且性能是一个问题,那么使用 Array.ConvertAll 应该会更有效:

int[] clickNum = Array.ConvertAll(new int[800], x => x = 2);

如果性能不让您担心,您还可以使用标准 LINQ Select:

int[] clickNum = new int[800].Select(x => x = 2).ToArray();
于 2012-05-27T08:30:23.947 回答