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

时间:2013-10-03 15:30:32

标签: c#

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

a,b,d,a

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

a,b,d

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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>会使删除变得更加简单,因为List<T>支持简单的API,例如直接使用List<T>.Remove

答案 2 :(得分:0)

您可以尝试使用以下

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

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

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

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

答案 3 :(得分: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();
}