如何从一个简单的数组中删除一次?例如,一个 char 数组包含以下字母:
a,b,d,a
我想删除一次字母“a”,结果将是:
a,b,d
从数组中删除一个项目是不可能的。数组的大小在分配后是不可变的。没有办法按说删除一个元素。您可以覆盖/清除元素,但数组的大小不会改变。
如果您想实际删除一个元素并更改集合的大小,那么您应该使用List<char>
而不是char[]
. 然后就可以使用RemoveAt
API
List<char> list = ...;
list.RemoveAt(3);
您可以通过尝试以下方法来使用 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();
}
如果您的目标是跳过第一个'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
直接使用。