【问题标题】:Add value to integer array in C#在 C# 中向整数数组添加值
【发布时间】:2017-12-01 08:46:24
【问题描述】:

如何将单个整数添加到整数数组中?

 if (valuesHigherThanAverage.Length == 0) valuesHigherThanAverage[valuesHigherThanAverage.Length] = arrayGetal;
 else valuesHigherThanAverage[valuesHigherThanAverage.Length + 1] = arrayGetal;

我有这段代码,我也尝试过 for 或 foreach 循环,但它不起作用。而且我需要使用 INT[] 并且不能使用 List。

【问题讨论】:

  • 数组的大小是固定的。
  • 如果你不能使用List<>然后创建一个元素大的新数组,分配旧数组并为最后一个元素分配新值。
  • ArrayList类。必要时可以轻松转换为普通数组。
  • 请告诉我,列表有什么问题?
  • if (valuesHigherThanAverage.Length == 0) 表示该数组有 NO 元素,也表示您无法访问位置0 的元素!一般来说:valuesHigherThanAverage[valuesHigherThanAverage.Length] 总是会导致 IndexOutOfBounds 异常。因为Length 总是比您可以使用的最大索引大 1 个数字。索引从 0 开始,计数在 1

标签: c#


【解决方案1】:

您不能在数组中添加新项,您必须创建一个 size+1 的新数组,复制所有现有值,然后设置最后一项的值。

更简单的方法是使用List<int>,如果空间不足,它会自动调整大小。调用Add 方法就足够了。

这里是数组大小调整算法的示例(Array.Resize 可以自动执行此操作,但这只是为了向您展示它应该如何工作):

int[] oldItems = new int[] { 1, 2, 3 };

int[] newItems = new int[oldItems.Length * 2];

for (int i = 0; i < oldItems.Length; i++)
{
    newItems[i] = oldItems[i];
}

newItems[oldItems.Length + 1] = 4;

【讨论】:

  • 我建议将大小不仅增加 1,还增加一点。确切的数字可能会受到 List 实现的“启发”?
  • 确实,我会使用*2
【解决方案2】:

该数组并非设计为在添加新元素时进行扩展。您需要调用Array.Resize(Of T) 来增加大小,但这会非常低效。

更符合您想要做的数据类型是List&lt;T&gt;

【讨论】:

    【解决方案3】:

    您不能像valuesHigherThanAverage.Length + 1 那样更改数组的大小。它有固定的大小。您正在跨越数组的上限。

    【讨论】:

      【解决方案4】:

      您可以创建一个新数组,其长度为旧数组的长度 + 1。

      public static int[] AddIntToArray(int[] sourceArray, int addValue)
      {
          int[] newArray = new int[sourceArray.Length + 1];
          Array.Copy(sourceArray, newArray, sourceArray.Length);
          newArray[newArray.Length] = addValue;
          return newArray;
      }
      

      【讨论】:

        猜你喜欢
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-21
        • 2020-03-28
        • 2016-07-15
        • 1970-01-01
        相关资源
        最近更新 更多