You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除数组空元素并将后续元素前移、缩小数组长度?

问题分析与修复方案

首先,你的现有代码存在几个关键问题:

  1. 变量未初始化:intSelected 没有被赋值,它应该指向数组中空字符串的索引位置(示例中为2)。
  2. 元素移动方向错误:当前代码将左侧元素复制到右侧,会把空字符串覆盖到后续非空元素上,完全不符合需求。正确逻辑是把空元素后方的元素依次向左移动,填补空元素的位置。
  3. 循环终止逻辑不合理:现有循环只移动一次元素就执行数组缩容,无法完成所有后续元素的移位。

修复后的手动移位代码

以下是修正后的完整逻辑,包含空元素定位、正确移位和数组缩容:

string[] Numbers = new string[5] { "1", "2", "", "3", "4" };

// 第一步:找到空字符串的索引
int emptyIndex = Array.IndexOf(Numbers, "");
if (emptyIndex == -1)
{
    MessageBox.Show("No empty element found");
    return;
}

// 第二步:将空元素后方的所有元素向左移动一位
int arrayLength = Numbers.Length;
for (int i = emptyIndex; i < arrayLength - 1; i++)
{
    Numbers[i] = Numbers[i + 1];
}

// 第三步:缩小数组长度,移除最后一个重复元素
Array.Resize(ref Numbers, arrayLength - 1);

// 验证结果
MessageBox.Show($"Result: {string.Join(", ", Numbers)}"); // 输出 "1, 2, 3, 4"

更简洁的实现方式(LINQ)

如果不需要手动实现移位逻辑,直接用LINQ过滤空元素更简洁且不易出错:

string[] Numbers = new string[5] { "1", "2", "", "3", "4" };
string[] filteredNumbers = Numbers.Where(s => !string.IsNullOrEmpty(s)).ToArray();

MessageBox.Show($"Result: {string.Join(", ", filteredNumbers)}");

针对更大数组的扩展性

  • 手动移位方案若要处理多个空元素,需循环查找并重复移位操作;
  • LINQ方案只需保留过滤条件,即可一次性移除所有空元素。

内容的提问来源于stack exchange,提问作者Tomaatje07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:20:28