C# 字符串数组中的空值

C# 字符串数组中的空值,c#,character-arrays,C#,Character Arrays,如何删除字符串数组中的空值 比如{,-2,3,,-4,+5,66…} 我需要删除中间的空值并重新调整数组大小 我不想使用列表 我不想创建一个新数组 请让我知道是否有可能与简单的代码。 谢谢。如果不想创建新阵列,则不可能。不能从简单数组中添加或删除项(如,string[]) 要实现您想要实现的目标(如果您删除了第二项要求),最直接的方法是: 计算源数组中的空值数 创建一个与源数组长度相同的新数组,减去步骤1中的空值数 将源数组中的所有非空值复制到新数组中 (可选)将对源阵列的引用(例如,srcAr

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

比如{,-2,3,,-4,+5,66…}

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

  • 我不想使用列表

  • 我不想创建一个新数组

  • 请让我知道是否有可能与简单的代码。
    谢谢。

    如果不想创建新阵列,则不可能。不能从简单数组中添加或删除项(如,
    string[]

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

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

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

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

    不,不创建新阵列是不可能的。不能调整数组的大小

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

    string[] items = new string[] { "", "-2", "3", null, "-4", "+5", null, "66" };
    
    items = items.Where(s => !String.IsNullOrEmpty(s)).ToArray();
    

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

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

    它将创建一个新的阵列,但我想不出一个解决方案不会。在决定如何继续之前,您确实需要考虑谁持有您正在操作的阵列的引用。

    如果数组未被任何其他代码引用(作为类的成员、lambda中捕获的变量或某个集合中的某个地方),则不必担心创建新数组。在这种情况下,我会使用类似what或suggest的内容


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

    我是这里唯一一个扫描数组并将成员移回空值上的人,因此可以创建一个连续的非空值列表

    这不会创建新的数组,而且实现起来很简单,而且知道可以在数组中移动条目也很重要


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

    好的,那么我们可以再次将新创建的数组以旧格式复制回去吗one@nagarjuna:是的,如果“复制回”是指将旧的引用设置为新的引用。否。。。除非你想让它在数组末尾为空,否则我会得到前3分。如何创建引用。如果我们这样做,源数组的长度会改变吗?我的意思是它会被重新排序。@nagarjuna:我的意思是:假设您有一个执行上述步骤1-3的方法,称为
    RemoveNullStrings
    ,它返回一个
    string[]
    (新数组)。然后,如果您有一个源数组,
    arr
    ,其中包含空值,则可以编写:
    arr=RemoveNullStrings(arr)
    arr
    设置为该方法返回的新数组(删除空值,因此长度较小)。
    s
    是一个范围变量,表示数组中已存在的每个字符串。本质上,它只是过滤掉所有的空字符串,并将结果
    IEnumerable
    转换成一个数组。我知道你在那里做了什么@Codesleuth:你在暗示什么吗?@Guffa:我直接说的是,这和我的答案是一样的,尽管有更多的评论。“对不起,我没有意识到我在含糊其辞。”@Codesleuth:你仍然含糊其辞。通常当有人这样说的时候,他们想说的不仅仅是指出相似之处。你能解释一下为什么你不想创建一个新的数组吗?
    string[] _array= new string[] { "", "z", "d", null, "a", "b", null, "66" };
    
    // select non-null elements only
    _array= _array.Where(a => !String.IsNullOrEmpty(a)).ToArray();