如何删除字符串数组中的Null值
喜欢{, - 2,3, - 4,+ 5,,66 ......}
我需要删除其间的空值并重新调整数组大小
我不想使用列表
我不想创建新数组
如果可以使用简单的代码,请告诉我。 谢谢。
答案 0 :(得分:16)
不,没有创建新阵列是不可能的。您无法调整阵列大小。
您可以轻松地创建一个没有空字符串的新数组和这样的空引用:
string[] items = new string[] { "", "-2", "3", null, "-4", "+5", null, "66" };
items = items.Where(s => !String.IsNullOrEmpty(s)).ToArray();
答案 1 :(得分:9)
如果你不想创建一个新数组,那么不,这是不可能的。您无法添加或删除一个简单数组中的项目(例如,string[]
)。
实现您想要实现的目标的最简单方法(如果您删除了第二个要求)将是:
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();