字符串数组中的NULL

时间:2010-02-16 13:18:12

标签: c# character-arrays

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

喜欢{, - 2,3, - 4,+ 5,,66 ......}

我需要删除其间的空值并重新调整数组大小

  1. 我不想使用列表

  2. 我不想创建新数组

  3. 如果可以使用简单的代码,请告诉我。 谢谢。

7 个答案:

答案 0 :(得分:16)

不,没有创建新阵列是不可能的。您无法调整阵列大小。

您可以轻松地创建一个没有空字符串的新数组和这样的空引用:

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

items = items.Where(s => !String.IsNullOrEmpty(s)).ToArray();

答案 1 :(得分:9)

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

实现您想要实现的目标的最简单方法(如果您删除了第二个要求)将是:

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

答案 2 :(得分:2)

正如Dan所说,您无法在Array中添加或删除值。但是,您可以使用LINQ删除值并生成第二个数组。

originalArray = originalArray.Where(s => !string.IsNullOrEmpty(s)).ToArray()

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

在决定如何继续之前,您真的需要考虑谁拥有您正在操作的阵列的引用。

如果数组不是引用的任何其他代码(作为类的成员,作为lambda中的捕获变量,或某个集合中的某个集合)< strong>那么你不应该担心创建一个新阵列。在这种情况下,我会使用像@Codesleuth@Guffa建议的内容。

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

答案 5 :(得分:0)

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

这不会创建一个新数组,并且实现起来很简单,知道你可以移动数组中的条目是非常重要的。

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

答案 6 :(得分:-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();