3

如何删除字符串数组中的空值

像 { ,-2,3, ,-4,+5, ,66...}

我需要删除它们之间的那些空值并重新调整数组的大小

  1. 我不想使用列表

  2. 我不想创建一个新数组

请让我知道是否可以使用简单的代码。谢谢你。

4

7 回答 7

17

不,不创建新数组是不可能的。您无法调整数组的大小。

您可以轻松地创建一个没有空字符串和空引用的新数组,如下所示:

string[] items = new string[] { "", "-2", "3", null, "-4", "+5", null, "66" };

items = items.Where(s => !String.IsNullOrEmpty(s)).ToArray();
于 2010-02-16T13:25:33.360 回答
9

如果您不想创建一个新数组,那么不,这是不可能的。您不能在简单数组中添加删除项目(如,string[])。

完成您想要实现的目标(如果您删除第二个要求)的最直接方法是:

  1. 计算源数组中空值的数量
  2. 创建一个与源数组长度相同的新数组减去步骤 1 中的空值数
  3. 将源数组中的所有非空值复制到新数组中
  4. (可选)将源数组的引用(例如srcArray)设置为新数组
于 2010-02-16T13:20:50.867 回答
2

正如 Dan 所说,您不能在Array. 但是,您可以使用 LINQ 删除这些值并生成第二个数组。

originalArray = originalArray.Where(s => !string.IsNullOrEmpty(s)).ToArray()
于 2010-02-16T13:25:31.213 回答
1

可能不是最高效的解决方案,但......

array.Where(s => s != null).ToArray();

它将创建一个新数组,但我想不出一个不会的解决方案。

于 2010-02-16T13:26:52.440 回答
0

在决定如何继续之前,您确实需要考虑谁拥有对您正在操作的数组的引用。

如果数组没有被任何其他代码引用(作为类的成员,作为 lambda 中的捕获变量,或者在某个集合中),那么您不必担心创建新数组。在那种情况下,我会使用@Codesleuth@Guffa建议的东西。

但是,如果可能存在其他包含对同一数组的引用的代码 - 那么您就不走运了,除非您可以安全地识别和更新在这些其他地方保存的引用。这是一件很难做到的事情- 你应该非常小心,假设你总是可以更新所有其他保存引用的地方。

于 2010-02-16T13:39:49.250 回答
0

我是这里唯一一个会扫描数组并将成员移回 NULL 的人,因此会制作一个连续的非空列表。

这不会创建一个新数组,而且实现起来很简单,重要的是要知道您可以在数组周围移动条目。

不幸的是,我正在工作,因此无法提供完整的代码,但是您可以通过在数组中搜索 NULL 然后将数组中的剩余项向上移动一个来实现它。继续这样做直到结束。我建议在搜索完成后清除剩余的整体。

于 2010-02-16T14:18:06.083 回答
-1
string[] _array= new string[] { "", "z", "d", null, "a", "b", null, "66" };

// select non-null elements only
_array= _array.Where(a => !String.IsNullOrEmpty(a)).ToArray();
于 2017-11-07T09:58:03.343 回答