0

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

a,b,d,a

我想删除一次字母“a”,结果将是:

a,b,d
4

4 回答 4

2

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

如果您想实际删除一个元素并更改集合的大小,那么您应该使用List<char>而不是char[]. 然后就可以使用RemoveAtAPI

List<char> list = ...;
list.RemoveAt(3);
于 2013-10-03T15:38:22.520 回答
0

您可以通过尝试以下方法来使用 linq

var someArray= new string[3];
someArray[0] = "a";
someArray[1] = "b";
someArray[2] = "c";

someArray= someArray.Where(sa => !sa.Equals("a")).ToArray();

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

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

于 2013-10-03T15:45:29.257 回答
0
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();
}
于 2013-10-03T15:57:16.817 回答
0

如果您的目标是跳过第一个'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>例如,从 array 切换到 a使得删除更加简单,因为它List<T>支持简单的 API,例如List<T>.Remove直接使用。

于 2013-10-03T15:36:38.597 回答