【问题标题】:How to clear an array如何清除数组
【发布时间】:2011-02-10 00:55:19
【问题描述】:

我有一个全局变量int[],我想清除它的数据并在循环中再次填充。

这在 C# 中怎么可能?

【问题讨论】:

标签: c# arrays


【解决方案1】:

静态Array.Clear() 方法“将数组中的一系列元素设置为零、假或无,具体取决于元素类型”。如果要清除整个数组,可以使用此方法并将其提供0 作为起始索引并提供myArray.Length 作为长度:

Array.Clear(myArray, 0, myArray.Length);

【讨论】:

  • 这个方法并不是从字面上清除数组,而是对数组中的每个元素设置0/false/null。
  • @Nyerguds array.Length = 0
  • @Benjin .Length 属性是只读信息,不是变量。 c# 数组构造完成后,不能改变其长度。
  • @Nyerguds 呃,我的意思是==。可以合理地(没有问题细节的上下文)将“清除数组”解释为“空数组”,并初始化为长度 0。不知道为什么;只是为了提供 1_bug 评论的替代方案。
【解决方案2】:

这不是您帖子的正确答案,但您可以根据需要使用此逻辑。 这是取自here的代码片段

using System;

class ArrayClear
{

   public static void Main()
   {
      int[] integers = { 1, 2, 3, 4, 5 };
      DumpArray ("Before: ", integers);
      Array.Clear (integers, 1, 3);
      DumpArray ("After:  ", integers);
   }

   public static void DumpArray (string title, int[] a)
   {
      Console.Write (title);
      for (int i = 0; i < a.Length; i++ )
      {
         Console.Write("[{0}]: {1, -5}", i, a[i]);
      }
      Console.WriteLine();
   }
}

这个输出是:

Before: [0]: 1    [1]: 2    [2]: 3    [3]: 4    [4]: 5
After:  [0]: 1    [1]: 0    [2]: 0    [3]: 0    [4]: 5

【讨论】:

    【解决方案3】:

    为什么不直接创建新数组并将其分配给现有的数组变量?

    x = new int[x.length];
    

    【讨论】:

    • 因为这意味着垃圾收集器有额外的工作来清理你留在内存中的所有内容。
    【解决方案4】:

    用列表代替会不会更容易。

    public List<int> something = new List<int>();
    

    然后:

    something.Add(somevalue);
    

    并清除:

    something.Clear();
    

    【讨论】:

    • -1:您不知道使用列表会更容易!问题是关于数组的。
    • @Adrian:同意!这个问题询问的是数组,而不是列表!
    • @Adrian:没错,我不知道我会更容易,但我只是建议,如果他真的需要一个数组,OP 可以根据建议选择另一个答案作为正确答案.对恕我直言投反对票有点苛刻:(。
    • 我同意 Fabian 的观点,列表是数组的一个很好的替代品,如果需要,可以很容易地转换为一个。提出更好的替代方案是回答问题的全部内容 - 由 OP 决定它是否是适当的答案。
    • 也许 OP 在使用数组时遇到了“XY 问题”,所以 @Fabian 建议一个替代方案是完全可以的...meta.stackexchange.com/questions/66377/what-is-the-xy-problem
    【解决方案5】:
      int[] x 
      int[] array_of_new_values
    
      for(int i = 0 ; i < x.Length && i < array_of_new_values.Length ;i++)
      {
            x[i] = array_of_new_values[i]; // this will give x[i] its new value
      }
    

    为什么要清除它?只需分配新值。

    【讨论】:

    • 我可以看到为什么你想要一个干净的零数组的很多原因,例如调试,看到进入数组的数据比覆盖数据更容易监控。
    • 我更改了一些值,而另一个必须为“0”。我可以这样做,但我正在寻找 1 行代码。
    【解决方案6】:

    对于二维数组,你应该这样做:

    Array.Clear(myArray, 0, myArray.GetLength(0)*myArray.GetLength(1));
    

    【讨论】:

    • myArray.Length 是 2D 数组myArray.GetLength(0)*myArray.GetLength(1) 的缩写。
    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2015-07-24
    • 2011-01-15
    • 2010-12-20
    相关资源
    最近更新 更多