【问题标题】:How can I check wether an array contains any item or is completely empty?如何检查数组是否包含任何项目或完全为空?
【发布时间】:2022-04-06 17:41:31
【问题描述】:

如果我定义一个整数数组:

int[] a = new int[13];

并且我没有在其中插入任何项目,我如何知道数组 a 是否包含任何项目或完全为空? 我是否必须遍历所有 a.Length 索引? 在列表中

List<int> b = new List<int>();

如果我检查:

if(b.Count == 0)
{
    // The list does not contain any items.
}

是否有等效的方法来检查数组? 我在互联网上发现检查数组是否为空或为空。 就我而言,我确定该数组不为空。 我只想知道它是否包含任何项目。 我不在乎数组中的哪个位置,也不在乎哪个项目。 非常感谢您。

【问题讨论】:

  • 如果您要动态扩展集合,请将数组排除在外。如果发生这种情况,您已经知道长度,请将该数字提供给 ctor 列表。

标签: c# arrays


【解决方案1】:
int[] a = new int[13]; // [0,0,0,0,0,0,0,0,0,0,0,0,0]

分配一个包含 13 个项目的数组。每一项的值为0default(int)

所以你必须检查

bool isEmpty =  a.All(x => x == default(int));

如果0 是数组中的有效值,则应使用可空类型:

int?[] a = new int?[13]; // [null,null,null,null,null,null,null,null,null,null,null,null,null]
bool isEmpty =  a.All(x => !x.HasValue);

【讨论】:

  • 这是低估。如果所有实际值都是类型的默认值。
  • @fubo 不包括我的情况。数组不是任务的正确集合类型。
  • @Karolis 如前所述,在这种情况下,int 不是数组的正确类型
  • @fubo 在任何情况下,任何类型的默认值都是不确定的。无论您是否将其包装为可为空的。
  • 例子很好!可空数组声明注释的末尾只有一个额外的逗号;-)
【解决方案2】:

因为它是一个整数,所以你可以检查是否所有的值都为零:

if (array.All(y=>y == 0))
  {
    //If all values are zero, this will proceed on this statement.       
  }

【讨论】:

    【解决方案3】:

    当你像这样定义一个数组时:

    int[] a = new int[13];
    

    你得到一个包含 13 个元素的数组。它们的值都为零,因为这是 int 的默认值。

    所以你可以做的是:

    bool hasElements = a.Any(x => x != 0);
    

    【讨论】:

      【解决方案4】:

      您可以创建自己的类来封装Array 类并跟踪数组是否已更改。

      public class MyArray<T>
      {
          private T[] array;
          private bool altered = false;
      
          public MyArray(int size)
          {
              array= new T[size + 1];
          }
      
          public T this[int index]
          {
              get
              {
                  return array[index];
              }
              set
              {
                  altered = true;
                  array[index] = value;
              }
      
          }
      
          public bool HasBeenAltered()
          {
              return altered;
          }
      }
      

      函数HasBeenAltered() 判断数组的任何项是否已更新。

      MyArray<int> arr = new MyArray<int>(10);
      arr.HasBeenAltered(); // false
      
      arr[4] = 4;
      arr.HasBeenAltered(); // true
      

      【讨论】:

      • 没问题。 PS。如果答案适合您的需求,请考虑accepting它。
      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 2019-09-21
      • 2019-08-08
      • 1970-01-01
      • 2021-09-26
      • 2011-01-16
      • 1970-01-01
      • 2014-04-06
      相关资源
      最近更新 更多