【问题标题】:How to set null a specific element of an array in C#?如何在 C# 中将数组的特定元素设置为 null?
【发布时间】:2015-06-03 17:07:56
【问题描述】:

我正在做一个控制台应用程序,如果通过参数传递的数字作为数组元素出现多次,则会删除数组元素。

我已经完成了主要算法,但我不能将元素设置为 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();
}

提前致谢! :-)

【问题讨论】:

  • 如果要删除元素,请使用List&lt;int&gt; 而不是数组!
  • 您可以使用 ArrayList 代替。然后你可以做array.remove(i)
  • int 不能是null
  • @KevinMee 注意:“对于ArrayList 的强类型替代方案,请考虑使用 List
  • 您不需要ref 来了解如何使用该数组。 (ref 一般很少使用)

标签: c# arrays null element


【解决方案1】:

我不完全确定你在追求什么,但让我理顺一些事情。这应该可以解决您的问题。

  1. 如果要将数组中的元素设置为 null,请确保数组的元素类型是引用类型。

例如:int 是值类型,因此不能设置为 null。但是,您可以使用 object,或者更好的整数:使用 nullable-int 变体:int?,并将其设置为 null。

简而言之,这不起作用:

int[] foo = new int[10];
foo[1] = null; // error: int is a value type
  1. 如果要修改数组,请在列表中进行;即使您可以重新分配和复制数组的元素,它也容易出错并且可能会给您带来问题。

所以,在代码中:

List<int> foo = new List<int> { 1,2,3,4,5};
foo.RemoveAt(2);
  1. 如果您删除了 List 中间的大量元素,您可能不是在寻找 List。

如果你想要的话,有一些数据结构更适合“随机删除”。例如,链表允许您在不移动所有数据的情况下删除中间元素,如果您需要“值包”,请使用HashSetDictionary

  1. 如果你还想要一个数组...

当然可以,只是可能效率不高:

int[] array = new int[10]; //...
Array.Copy(array, src, array, src-1, array.Length - src - 1);
Array.Resize(ref array, array.Length-1);

【讨论】:

  • 请注意,int? 不是引用类型。这是一个struct,在设置和比较null时有特殊处理。
  • 感谢您的解释!也感谢所有评论的人:D
  • @juharr 是的,这就是我提到对象的原因,boxes 是值类型。你是对的,这是一个很好的补充。
【解决方案2】:

您可以使用 LINQ 删除重复的元素:

var intArray = new[] { 10, 2, 2, 3, 4 };
var remove = intArray.Distinct().ToArray();

正如其他人所说,没有 NULL int。

同样你也可以用 List 试试

List<Type> list1 = list.Distinct().ToList<Type>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多