用于更改数组值的Linq表达式

本文关键字:Linq 表达式 数组 用于 | 更新日期: 2023-09-27 18:29:11

我已经用默认值0xFF初始化了一个大小为20的数组,如下所示:

Byte[] tempArray = Enumerable.Repeat((Byte)0xFF, 20).ToArray();

现在我想将每4个位置的值更改为其他值,比如0xA0

Linq的表达式应该是什么?

用于更改数组值的Linq表达式

您可以使用Enumerable.Range,然后根据索引将索引投影到所需值:

Byte[] tempArray = Enumerable
  .Range(0, 20)
  .Select(i => i%4 != 0 ? (Byte) 0xFF : (Byte) 0xA0)
  .ToArray();

LINQ用于访问数据,而不是对其进行修改。如果您从20个0xFF s的数组开始,则LINQ不是一个适合对其进行更改的API。

但是,您可以使用LINQ在旧阵列的基础上构建一个新阵列:

var res = tempArray.Select((v, i) => i % 4 != 0 ? v : (Byte)0xA0).ToArray();

这将生成一个全新的数组,而不是原地更改tempArray。您可以将res复制到tempArray中,或者如果希望更改tempArray,则可以进行分配。

tempArray = tempArray.Select((b, i) => i % 4 == 0 ? (byte)0xA0 : b).ToArray();

如果你真的想创建一个具有交替值的新数组,你已经有了很好的答案。

但没有人展示修改现有阵列的正常方法,即使用for循环:

for (int i = 0; i < tempArray.Length; i++)
    if ((i + 1) % 4 == 0)
        tempArray[i] = 0xA0;