【问题标题】:Remove last character from array in c#从C#中的数组中删除最后一个字符
【发布时间】:2016-06-01 07:49:47
【问题描述】:

我有一个数组,它在数组中为我带来了19 记录,如下所示

[![数组快照][1]][1]

我的最后一个值是""

我想删除它。

这是我在array 中声明和获取值的地方

string[] arrS = hidRateA.Value.Split(new char[] { ',' });

请告诉我如何从数组中删除最后一个值。

【问题讨论】:

  • string.Split 方法有一个有趣的重载,它允许 StringSplitOptions.RemoveEmptyEntries 空字符串仅作为数组的最后一个条目出现?
  • 如果它总是最后一个元素那么你可以从0 to array.length-1中选择元素
  • 那么...,这个问题是关于什么的?从数组中删除项目?还是正确拆分字符串?作者应该决定一个。
  • 从数组中删除项目

标签: c# arrays linq


【解决方案1】:

如果只有最后一项为空,您可以在拆分字符串之前修剪最后一个逗号,

string[] arrS = hidRateA.Value.TrimEnd(',').Split(new char[] { ',' });

【讨论】:

  • 如果末尾有多个逗号怎么办?
  • 他只提到最后一个是空的。如果不是这种情况并且会有更多的项目是空的,那么这确实行不通。
【解决方案2】:

或者,如果您知道最后一项将始终为空并且您不需要检测它,您可以直接“接受”。

var result=arr.Take(arr.Length-1);

【讨论】:

  • 考虑到我们被告知这个问题的一切,这听起来像是最好的选择。
  • @Danny 不,这不是一个好选择,更不用说最好了。你永远不应该只删除最后一个元素,因为它曾经是空的。
  • +1 因为这是对实际问题的回答。当然不能解决原来的问题。
  • @marsze 甚至没有试图理解这个问题,而只是简单地回复问题标题并不是赢得投票的方式。 “如果您知道最后一项将始终为空并且您不需要检测” 是一个有缺陷的假设,即 迟早会破坏程序。跨度>
  • @CodeCaster 如果我在 Google 上搜索“从数组中删除最后一项”并在 Stackoverflow 上找到一个带有该标题的问题,我希望能找到一个答案,告诉我确切的操作方法,而不是解决问题的答案其他人的程序设计问题。
【解决方案3】:

您可以指定StringSplitOptions.RemoveEmptyEntries

hidRateA.Value.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

另请注意," "(空格)根据定义不是为空,因此不会从结果数组中删除。

如果你有空格,你可以使用下面的代码来过滤空格。

hidRateA.Value.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)
            .Where(x => !string.IsNullOrWhiteSpace(x))
            .Select(s => s.Trim());

【讨论】:

  • 您必须告知用户这可能会产生什么副作用。
【解决方案4】:

这段代码几乎完全符合您在问题中的要求:

void Main()
{
    string firstTest = "1,2,3,"; // ends with a comma
    string secondTest = "a,b,c"; // ends with a character

    string[] firstArray = CreateArray(firstTest);
    PrintArray(firstArray);

    Console.WriteLine();

    string[] secondArray = CreateArray(secondTest);
    PrintArray(secondArray);
}

string[] CreateArray(string str)
{
    string[] array = str.Split(',');
    return array.Where((s, i) =>  // return only those cells in the array where
        i < array.Length - 1 ||   // it's not the last character, or
        s != string.Empty)        // it's not empty
        .ToArray();               // in array form
}

void PrintArray(string[] array)
{
    for (int i = 0; i < array.Length; i++)
    {
        Console.WriteLine("array[{0}] = '{1}'", i, array[i]);
    }
}

但是你没有告诉我们你为什么要做你正在做的事情。你真的只想删除最后一项,如果它是空的吗?如果您只想删除任何空项目,那么str.Split(',', StringSplitOptions.RemoveEmptyEntries) 会更适合您。

【讨论】:

    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2015-01-12
    • 2017-08-19
    相关资源
    最近更新 更多