用于更改数组值的Linq表达式
本文关键字:Linq 表达式 数组 用于 | 更新日期: 2023-09-27 18:29:11
我已经用默认值0xFF
初始化了一个大小为20
的数组,如下所示:
Byte[] tempArray = Enumerable.Repeat((Byte)0xFF, 20).ToArray();
现在我想将每4个位置的值更改为其他值,比如0xA0
。
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;