Añadir items a un array sin usar List, ni crear nuevos arrays en C#

Iniciado por RevolucionVegana, 24 Mayo 2017, 18:57 PM

0 Miembros y 1 Visitante están viendo este tema.

RevolucionVegana

Hola a todos, necesito ir metiendo palabras conforme el usuario vaya escribiéndolas, es decir incrementar el tamaño del array en 1 y meter su valor, he visto que para esto se usan las listas pero no puedo utilizar listas para este ejercicio, y tampoco puedo crear otro array copiando el actual y sumándole la nueva palabra tiene que ser en el mismo XD, no quiero que me deis nada hecho simplemente saber si es posible hacerlo y que se utilizaría, con un enlace me iría bien, gracias y un saludo!
HAS DICHO ALGO NENAAAAAA?!

El Benjo

Buen día.

Si has leído un poquito los conceptos de la programación te habrás topado con algún texto que dice que un array es una variable de referencia, es decir, que apunta a una posición de memoria. En .NET es igual, lo que tienes que hacer es precisamente crear un nuevo array, copiar los elementos, agregar el nuevo elemento al final y después hacer que tu viejo array apunte al nuevo.

Otra cosa, no has dicho si estás programando en C# o en VisualBasic. VisualBasic utiliza la función ReDim para redimensionar arreglos sin alterar los elementos que contiene. Pero internamente utiliza el mismo procedimiento que te acabo de describir.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

RevolucionVegana

Cita de: El Benjo en 24 Mayo 2017, 20:14 PM
Buen día.

Si has leído un poquito los conceptos de la programación te habrás topado con algún texto que dice que un array es una variable de referencia, es decir, que apunta a una posición de memoria. En .NET es igual, lo que tienes que hacer es precisamente crear un nuevo array, copiar los elementos, agregar el nuevo elemento al final y después hacer que tu viejo array apunte al nuevo.

Otra cosa, no has dicho si estás programando en C# o en VisualBasic. VisualBasic utiliza la función ReDim para redimensionar arreglos sin alterar los elementos que contiene. Pero internamente utiliza el mismo procedimiento que te acabo de describir.

Buenas muchas gracias por la respuesta, estoy programando en C#, la cuestión está en que, no puedo hacerlo de esa forma porque está dentro de un bucle y esto tendría que ser 20 veces, entonces si pudiese concatenarle al nombre del array un numero (al nombre del array) entonces no habría problema pero no se si se puede hacer esto, pero bueno el caso es que esta forma aunque es bastante interesante en este caso no me serviría, gracias y un saludo!
HAS DICHO ALGO NENAAAAAA?!

Serapis

Aunque te hayan dicho que uses sí o sí, un array, el como lo hagas es ya cosa tuya.. luego, la forma incorrecta de hacerlo, es redimensionar cada vez que se añade una palabra... ridículo e innecesario.


array Palabras()
entero NumPalabras

Funcion AñadirItem(String Palabra)
   si numpalabras mod 100 = 0 luego
       redimensionamos array + 100 elementos
   Fin si

   Palabras(numPalabras)= palabra
   Incrementar Numpalabras
Fin funccion


Este simple código, hace que al menos no redimensiones ni copies un array con cada añadido, si no con cada 100 añadidos (ó 1000, o los que tu quieras poner en función del destino que haya de tener).

De todos modos, en efecto es ineficiente. el uso de unn array se circunscribe precisamente a cuando se conoce el tamaño exacto o al menos se conoce que no supera cierto tamaño.
Cuando el número de elementos que haya de ser contenidos sea absolutamente incierto, habrá que usar una colección que añada elementos sin una sobrecarga excesiva... lista enlazada, tablahash, pila, cola,  árbol, etc... será mejor en estos casos que un array.

dato000

claro que se puede, usa el metodo push()

https://msdn.microsoft.com/en-us/library/system.collections.stack.push(v=vs.110).aspx

Aunque usa un objeto tipo stack, pues viene a ser lo mismo que una lista o un arreglo.

Personalmente prefiero el uso de listas, mucho más moldeables y soportan una gran cantidad de variaciones para sobrecarga.

Te ahorras todo simplemente con esto:

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

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

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




Eleкtro

#5
Hay muchos tipos que encapsulan un Array "expandible" cuyo tamaño aumenta dinámicamente cuando es necesario, como por ejemplo el tipo ArrayList, List, Tuple, Dictionary, o Stack, entre otros. Cada tipo evidentemente ha sido diseñado para un propósito distinto, se debe escojer el más adecuado para cada ocasión/problema, pero cualquiera de ellos te sirve para cumplir la función básica de almacenar elementos en una colección expandible.




Cita de: RevolucionVegana en 24 Mayo 2017, 18:57 PMtampoco puedo crear otro array copiando el actual y sumándole la nueva palabra tiene que ser en el mismo XD

Eso no es posible, un Array es representado como una colección de tamaño fijo. Como ya te han explicado más arriba, precisamente debes crear un nuevo Array de un tamaño mayor en +1 al que copiarle los elementos del antiguo Array y poder almacenar un elemento más. Por algo es que la clase Array expone un método llamado Array.Resize().

Sinceramente, ¿qué te impide usar un List?, es un tipo mucho más flexible que el Array.

Saludos!








RevolucionVegana

Muchas gracias a todos por las respuestas me habéis aclarado muchas cosas y prácticamente me habéis dado todas o casi todas las opciones posibles, gracias! El hecho de que no pueda utilizar List es porque lo indicaba el ejercicio entonces me han entrado ganas de saber como querría que lo hiciese, de nuevo gracias y un saludo a todos!
HAS DICHO ALGO NENAAAAAA?!

dato000

Cita de: RevolucionVegana en 25 Mayo 2017, 01:51 AM
El hecho de que no pueda utilizar List es porque lo indicaba el ejercicio entonces me han entrado ganas de saber como querría que lo hiciese, de nuevo gracias y un saludo a todos!

Eso es porque el cabrón del profesor sabe que la mejor manera es usando List.  :laugh: :laugh: :laugh: