2012-03-05 31 views
6

Me gustaría agregar o eliminar mediante programación algunos elementos a una matriz de cadenas en C#, pero manteniendo los elementos que tenía antes, un poco como la función VB ReDim Preserve.Agregar elementos a una matriz C#

+8

¿Qué has intentado? Esta pregunta debido a su naturaleza básica probablemente tendrá 50 respuestas en 3 minutos. Google habría sido igual de útil. –

+2

v. V. Redim preservar era y es malo. Estás ** siempre **, sin excepción, es mejor usar un tipo de colección. Y no es frecuente que haga declaraciones absolutas como esa. –

+1

Menos 5 parece un poco duro para esta pregunta. Luché con este concepto y la transición al pasar de VBA a C#. – Brad

Respuesta

11

La sugerencia obvia sería utilizar un List<string> lugar, que ya habrá leído en las otras respuestas . Esta es definitivamente la mejor manera en un escenario de desarrollo real.

Por supuesto, quiero hacer las cosas más interesantes (mi día es), así que responderé a su pregunta directamente.

Aquí hay un par de funciones que serán Agregar y quitar elementos de una string[] ...

string[] Add(string[] array, string newValue){ 
    int newLength = array.Length + 1; 

    string[] result = new string[newLength]; 

    for(int i = 0; i < array.Length; i++) 
     result[i] = array[i]; 

    result[newLength -1] = newValue; 

    return result; 
} 

string[] RemoveAt(string[] array, int index){ 
    int newLength = array.Length - 1; 

    if(newLength < 1) 
    { 
     return array;//probably want to do some better logic for removing the last element 
    } 

    //this would also be a good time to check for "index out of bounds" and throw an exception or handle some other way 

    string[] result = new string[newLength]; 
    int newCounter = 0; 
    for(int i = 0; i < array.Length; i++) 
    { 
     if(i == index)//it is assumed at this point i will match index once only 
     { 
      continue; 
     } 
     result[newCounter] = array[i]; 
     newCounter++; 
    } 

    return result; 
} 
+0

¡Gracias a todos por el tiempo dedicado a mi pregunta y por haber respondido! ¡Todos ustedes me han sido útiles! Gracias en particular a ti, ¡tu respuesta es la que estaba buscando! – Cippo

5

No utilice una matriz: utilice un List<T> genérico que le permite agregar elementos dinámicamente.

Si no es una opción, puede usar Array.Copy o Array.CopyTo para copiar la matriz en una matriz más grande.

1

Use List<string> en lugar de string[].

La lista le permite agregar y quitar elementos con un buen rendimiento.

5

Desde matrices implementan IEnumerable<T> puede utilizar Concat:

string[] strArr = { "foo", "bar" }; 
strArr = strArr.Concat(new string[] { "something", "new" }); 

o lo que sería más apropiado sería utilizar un tipo de colección que apoya la manipulación en línea.

0

Debería echar un vistazo a Listobject. Las listas tienden a ser mejores para cambiar dinámicamente como desees. Las matrices no tanto ...

0

Se puede utilizar una colección genérica, como Lista <>

List<string> list = new List<string>(); 

// add 
list.Add("element"); 

// remove 
list.Remove("element"); 
+0

El concepto equivalente de eliminar un elemento de una lista como de una matriz es probablemente a través del método 'RemoveAt' porque toma el valor del índice. 'Remove' elimina la primera aparición que podría desearse pero parece más complicado de controlar. – Brad

9

Si realmente no quiere (o no puede) usar una colección genérica en lugar de su matriz, Array.Resize es redim versión de C# 's de preservar:

var oldA = new [] {1,2,3,4}; 
Array.Resize(ref oldA,10); 
foreach(var i in oldA) Console.WriteLine(i); //1 2 3 4 0 0 0 0 0 0 
0

¿Qué es abaut éste:

List<int> tmpList = intArry.ToList(); tmpList.Add(anyInt); intArry = tmpList.ToArray();

0

Puede utilizar este fragmento:

static void Main(string[] args) 
{ 



     Console.WriteLine("Enter number:"); 
     int fnum = 0; 
     bool chek = Int32.TryParse(Console.ReadLine(),out fnum);    


     Console.WriteLine("Enter number:"); 
     int snum = 0; 
     chek = Int32.TryParse(Console.ReadLine(),out snum); 


     Console.WriteLine("Enter number:"); 
     int thnum = 0; 
     chek = Int32.TryParse(Console.ReadLine(),out thnum); 


     int[] arr = AddToArr(fnum,snum,thnum); 

     IOrderedEnumerable<int> oarr = arr.OrderBy(delegate(int s) 
     { 
      return s; 
     }); 


     Console.WriteLine("Here your result:"); 


     oarr.ToList().FindAll(delegate(int num) { 

      Console.WriteLine(num); 

      return num > 0; 

     }); 



} 



public static int[] AddToArr(params int[] arr) { 

    return arr; 
} 

espero que esto ayudará a que, simplemente cambiar el tipo

Cuestiones relacionadas