2013-03-05 78 views
1

我有一個字符串數組,我想在中間的某處添加一個新的值,但不知道如何去做。任何人都可以爲我做這個方法嗎?如何在數組中插入一個值,保持秩序?

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; 
     } 
    } 
} 
+2

沒有人會做的功課... – 2013-03-05 21:57:47

+2

我敢肯定有人會TBH :) – bas 2013-03-05 21:58:43

+2

提示:首先,你需要在添加點之後移動數組的所有元素,將數組的大小增加1。然後設置值。進一步的提示:一個數組可能不是這個的理想結構。一個'LinkedList'可能會好很多。或者也許不要按順序存儲這些值,而是在需要時用'OrderBy'順序讀取它們? – David 2013-03-05 21:59:24

回答

10

你不能將項目添加到一個數組,它始終保持相同的大小。

要添加一個添加了項目的數組,您需要分配一個新的數組並添加一個項目,並將原始數組中的所有項目複製到新數組中。

這當然是可行的,但效率不高。您應該使用List<string>來代替,它已經有一個Insert metod。

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工作,你可能需要修改你需要的類型。這是遞歸複製數組的一個例子。

0

查看如何IList插入方法在這裏實現

+0

由於'IList'是一個接口,它不包含任何實現。 – Guffa 2013-03-06 17:43:03