【问题标题】:How do you insert a value into an array, preserving order?如何将值插入数组,保持顺序?
【发布时间】:2023-03-10 04:06:02
【问题描述】:

我有一个字符串数组,我想在中心的某处添加一个新值,但不知道该怎么做。任何人都可以为我做这个方法吗?

void AddValueToArray(String ValueToAdd, String AddAfter, ref String[] theArray) {
    // Make this Value the first value
    if(String.IsNullOrEmpty(AddAfter)) {
        theArray[0]=ValueToAdd; // WRONG: This replaces the first Val, want to Add a new String 
        return;
    }

    for(int i=0; i<theArray.Length; i++) {
        if(theArray[i]==AddAfter) {
            theArray[i++]=ValueToAdd; // WRONG: Again replaces, want to Add a new String 
            return;
        }
    }
}

【问题讨论】:

  • 这里没有人会做你的功课......
  • 我很确定有人会 tbh :)
  • 提示:首先你需要将数组的所有元素移动到添加点之后,将数组的大小增加一。然后设置值。进一步提示:数组可能不是理想的结构。 LinkedList 可能会好很多。或者可能不按顺序存储值,而是在需要时使用OrderBy 按顺序读取它们?
  • 数组不应该这样工作,你为什么需要它是一个数组?它似乎是一个你应该使用的列表
  • 大声笑,这不是家庭作业。我只是认为没有 List = array.ToList(), list.insert(3, string), array = list.ToArray() ... 会有更聪明的方法

标签: c# arrays


【解决方案1】:

您不能将项目添加到数组中,它始终保持相同的大小。

要获得一个添加了项目的数组,您需要分配一个包含更多项目的新数组,并将原始数组中的所有项目复制到新数组中。

这当然可行,但效率不高。您应该改用 List&lt;string&gt;,它已经有一个 Insert 方法。

【讨论】:

    【解决方案2】:

    这仅在某些特定情况下有效。

    public static void AddValueToArray(ref String[] theArray, String valueToAdd, String addAfter) {
        var count=theArray.Length;
        Array.Resize(ref theArray, 1+count);
        var index=Array.IndexOf(theArray, addAfter);
        var array=Array.CreateInstance(typeof(String), count-index);
        Array.Copy(theArray, index, array, 0, array.Length);
        ++index;
        Array.Copy(array, 0, theArray, index, array.Length);
        theArray[index]=valueToAdd;
    }
    

    这是一个示例,但它适用于 Type,您可能需要修改所需的类型。这是一个递归复制数组的例子。

    【讨论】:

      【解决方案3】:

      看看IListInsert方法是如何实现的

      【讨论】:

      • IList 是一个接口,它不包含任何实现。
      猜你喜欢
      • 2010-12-09
      • 2013-10-03
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2011-09-25
      • 2011-09-21
      • 1970-01-01
      相关资源
      最近更新 更多