从简单数组中删除项目一次

本文关键字:一次 删除项目 简单 数组 | 更新日期: 2023-09-27 18:33:58

如何从简单数组中删除项目一次?例如,char 数组包含以下字母:

a,b,d,a

我想删除字母"a"一次,那么结果将是:

a,b,d

从简单数组中删除项目一次

从数组中删除项目实际上是不可能的。 数组的大小在分配后是不可变的。 没有办法删除每个元素。 您可以覆盖/清除元素,但数组的大小不会改变。

如果要实际删除元素并更改集合的大小,则应使用 List<char> 而不是 char[] 。 然后,您可以使用RemoveAt API

List<char> list = ...;
list.RemoveAt(3);

如果您的目标是跳过第一个'a',然后删除第二个,您可以使用以下内容:

int first = Array.IndexOf(theArray, 'a');
if (first != -1)
{
    int second = Array.IndexOf(theArray, 'a', first+1);
    if (second != -1)
    {
    theArray = theArray.Take(second - 1).Concat(theArray.Skip(second+1)).ToArray();
    }
}

如果您只需要删除任何'a'字符(因为您指定了顺序不相关),则可以使用:

int index = Array.IndexOf(theArray, 'a');
if (index != -1)
{
    theArray = theArray.Take(index - 1).Concat(theArray.Skip(index+1)).ToArray();
}

请注意,这些实际上并没有从数组中删除该项目 - 它们创建一个新数组,其中新创建的数组中缺少该元素。 由于数组在创建后不会更改总长度,因此这通常是最佳选择。

如果要经常执行此操作,则可能需要使用允许简单删除元素的集合类型。 例如,从数组切换到List<char>使删除变得更加简单,因为List<T>支持简单的API,例如直接使用List<T>.Remove

您可以通过尝试以下操作来使用 linq

var someArray= new string[3];
someArray[0] = "a";
someArray[1] = "b";
someArray[2] = "c";
someArray= someArray.Where(sa => !sa.Equals("a")).ToArray();

请注意:此方法不是从数组中删除元素,而是创建一个排除元素的新数组。这可能会对性能产生影响。

可以考虑使用列表或集合。

static void Main(string[] args)
{
    char[] arr = "aababde".ToArray();
    arr = RemoveCharacter(arr, 'a');
    arr = RemoveCharacter(arr, 'b');
    arr = RemoveCharacter(arr, 'd');
    arr = RemoveCharacter(arr, 'z');
    arr = RemoveCharacter(arr, 'a');
    //result is 'a' 'b' 'e'
}
static char[] RemoveCharacter(char[] array, char c)
{
    List<char> list = array.ToList();
    list.Remove(c);
    return list.ToArray();
}