我正在做一个控制台应用程序,如果通过参数传递的数字作为数组元素出现多次,则删除数组元素。
我已经完成了主要算法,但我无法将元素设置为 null。这是我的代码:
static int[] RemoveElement(ref int[] array, int num)
{
int i;
for (i = 0; i < array.Length; i++)
{
if (array[i] == num)
{
array[i] = 1; //This is a temporal solution.
}
}
return array;
}
这是主要内容:
static void Main(string[] args)
{
int[] a = {10, 2, 2, 3, 4};
Console.WriteLine("Write a number:");
int b = int.Parse(Console.ReadLine());
int[] arrayInts = RemoveElement(ref a, b);
foreach (var variable in arrayInts)
{
Console.WriteLine(variable);
}
Console.ReadKey();
}
提前致谢! :-)
最佳答案
我不完全确定你在追求什么,但让我理清一些事情。这应该可以解决您的问题。
- 如果要将数组中的元素设置为空,请确保数组的元素类型是引用类型。
例如:int
是一个值类型,因此不能设置为null。但是,您可以使用 object
,或者更适合整数:使用 nullable-int 变体:int?
,并将其设置为 null。
简而言之,这行不通:
int[] foo = new int[10];
foo[1] = null; // error: int is a value type
- 如果要修改数组,在列表中进行;即使您可以重新分配和复制数组的元素,它也很容易出错并且可能会给您带来问题。
所以,在代码中:
List<int> foo = new List<int> { 1,2,3,4,5};
foo.RemoveAt(2);
- 如果您删除了列表中间的大量元素,您可能不是在寻找列表。
如果您需要的话,有一些数据结构更适合“随机删除”。例如,链接列表允许您删除中间元素而不移动所有数据,如果您需要“值袋”,请使用 HashSet
或 Dictionary
。
- 如果你还想要一个数组......
这当然是可能的,只是可能效率不高:
int[] array = new int[10]; //...
Array.Copy(array, src, array, src-1, array.Length - src - 1);
Array.Resize(ref array, array.Length-1);
关于c# - 如何在 C# 中将数组的特定元素设置为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626444/