编写代码以在数组的所有元素上循环的最快方法

本文关键字:元素 循环 方法 代码 数组 | 更新日期: 2023-09-27 18:27:50

很多时候我需要循环遍历数组的所有项。如果是List,我会使用ForEach扩展方法。

我们还有类似的数组吗。

对于。例如,假设我想要声明大小为128&将所有成员初始化为true。

bool[] buffer = new bool [128];

可以有更多的用例

现在将其初始化为true。有什么扩展方法吗?或者我需要写传统的foreach循环吗??

编写代码以在数组的所有元素上循环的最快方法

您可以使用它来初始化数组:

bool[] buffer = Enumerable.Repeat(true, 128).ToArray();

但总的来说,没有。我不会使用Linq来编写任意循环,只用于查询数据(毕竟,它被称为语言集成查询)。

您可以创建一个扩展方法来初始化数组,例如:

public static void InitAll<T>(this T[] array, T value)
{
    for (int i = 0; i < array.Length; i++)
    {
        array[i] = value;
    }
}

并按如下方式使用:

bool[] buffer = new bool[128];
buffer.InitAll(true);

编辑:

为了解决对引用类型没有用处的问题,扩展这个概念很简单。例如,您可以添加一个过载

public static void InitAll<T>(this T[] array, Func<int, T> initializer)
{
    for (int i = 0; i < array.Length; i++)
    {
        array[i] = initializer.Invoke(i);
    }
}
Foo[] foos = new Foo[5];
foos.InitAll(_ => new Foo());
//or
foos.InitAll(i => new Foo(i));

这将创建5个新的Foo实例,并将它们分配给foos数组。

您可以不分配值,而是使用它。

        bool[] buffer = new bool[128];
        bool c = true;
        foreach (var b in buffer)
        {
            c = c && b;
        }

或者使用Linq:

        bool[] buffer = new bool[128];
        bool c = buffer.Aggregate(true, (current, b) => current && b);