如何从简单数组中删除一次项目?例如,char数组包含以下字母:
a,b,d,a
我想删除字母“a”一次,然后结果将是:
a,b,d
答案 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)
您可以尝试使用以下
来使用linqvar 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();
}