C#如何查找数组首个值为null的元素位置并在该位置赋值
C# 查找数组首个null位置并赋值实现方案
首先要注意C#中数组是定长结构,你描述的需求实际分为两种场景,对应实现方式如下:
场景1:仅给已存在的null位置赋值(不需要改变数组长度)
你的示例就属于该场景,直接遍历找到首个null的索引赋值即可,两种实现方式:
基础循环实现(性能最优,无需引入额外命名空间)
// 示例用可空int数组,和你给出的示例结构一致 int?[] a = new int?[7]; a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3; // 剩余元素默认值为null int firstNullIndex = -1; // 遍历找第一个null的位置 for (int i = 0; i < a.Length; i++) { if (a[i] == null) { firstNullIndex = i; break; } } if (firstNullIndex != -1) { // 按你的示例赋值为索引值,可替换为任意需要的数值 a[firstNullIndex] = firstNullIndex; } else { // 数组无null元素时的自定义逻辑,比如扩容后赋值 Array.Resize(ref a, a.Length + 1); a[^1] = a.Length - 1; }
LINQ 简洁实现
需要先引入System.Linq命名空间:
using System.Linq; // 查找第一个null索引 int firstNullIndex = a.Select((value, index) => new { value, index }) .FirstOrDefault(item => item.value == null)?.index ?? -1; // 后续赋值逻辑和上面一致
场景2:需要插入新元素(插入后数组长度+1,原位置元素后移)
如果是真·插入操作,不推荐直接用数组实现,优先用List<T>更方便:
List<int?> list = new List<int?> { 0, 1, 2, 3, null, null, null }; // 查找第一个null的索引 int firstNullIndex = list.FindIndex(item => item == null); if (firstNullIndex != -1) { // 在对应位置插入值,原位置及之后的元素自动后移 list.Insert(firstNullIndex, 4); } else { // 无null则追加到末尾 list.Add(4); } // 需要转回数组的话调用下面的方法 // int?[] a = list.ToArray();
注意事项
- 非可空值类型数组(比如普通
int[])不存在null值,默认值为0,如果要找第一个默认值,把判断条件改为item == default即可 Array.Resize本质是生成新数组再拷贝原有元素,频繁调用会有性能损耗,需要频繁增删元素的场景优先用List<T>
内容的提问来源于stack exchange,提问作者Developer_Raghu
相关产品推荐
相关产品推荐

