2009-10-21 18 views
33

¿Cómo es una matriz de cadena donde no se sabe dónde está el tamaño de la matriz en C# .NET?matriz de cadena con tamaño desconocido

String[] array = new String[]; // this does not work 
+0

posible duplicado de [Cómo agregar una cadena a una cadena \ [\] matriz? No hay función .Add] (http://stackoverflow.com/questions/1440265/how-to-add-a-string-to-a-string-array-theres-no-add-function) – Antonio

Respuesta

61

¿Hay alguna razón específica por la que necesite utilizar una matriz? Si no conoce el tamaño antes de mano es posible que desee utilizar List<String>

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

list.Add("Hello"); 
list.Add("world"); 
list.Add("!"); 

Console.WriteLine(list[2]); 

le dará una salida de

! 

MSDN - List(T) para más información

+0

¿Serán ellos? agregado después de la orden en que los coloqué, para que pueda llamarlos como array [int] ... – sv88erik

+1

se agregarán en el orden en que los agrega, puede acceder a ellos con un indexador. Respuesta editada para un ejemplo. –

+1

Sí, aún puede indexar los elementos en una lista genérica de la misma manera que usa una matriz. – David

5

No se puede crear una matriz sin un tamaño. Necesitarías usar una lista para eso.

1

Creo que puede estar buscando la clase StringBuilder. Si no es así, entonces la clase de lista genérica en forma de cadena:

List<string> myStringList = new List<string(); 
myStringList.Add("Test 1"); 
myStringList.Add("Test 2"); 

O, si tiene que estar absolutamente seguro de que las cadenas se mantienen en orden:

Queue<string> myStringInOriginalOrder = new Queue<string(); 
myStringInOriginalOrder.Enqueue("Testing..."); 
myStringInOriginalOrder.Enqueue("1..."); 
myStringInOriginalOrder.Enqueue("2..."); 
myStringInOriginalOrder.Enqueue("3..."); 

Recuerde que con la clase List, la El orden de los artículos es un detalle de implementación y no se garantiza que se mantendrán en el mismo orden en que los ingresó.

+0

¿por qué estaría buscando StringBuilder? esto no tiene sentido –

+0

Parece que está intentando juntar varias cuerdas. Añadí que puede querer usar la clase List si quiere hacer un seguimiento de varias cadenas. Además, la clase Queue si necesita retener el orden. – jasonh

+1

"con la clase List, el orden de los elementos es un detalle de implementación y no se garantiza que se mantendrán en el mismo orden en que los colocaste". Eso no es correcto La lista conserva el orden: si realiza una secuencia de Agrega, luego itere la lista, los elementos estarán en el orden en que los agregó. (Por supuesto, puede insertar elementos explícitamente en el medio de la lista, ordenar la lista, etc., pero las cosas permanecen en el orden que usted solicitó). Probablemente esté pensando en Dictionary, HashSet, etc. – itowlson

0

Supongo que el tamaño de la matriz es un valor calculado.

int size = ComputeArraySize(); 

// Then 

String[] array = new String[size]; 
0

Se puede utilizar una lista de cadenas y luego, cuando haya terminado su uso strings.ToArray() para obtener la matriz de cadenas para trabajar?

4

Como han mencionado otros, puede utilizar un List<String> (que acepto sería una mejor opción). En el caso de que tenga la String[] (para pasar a un método existente que lo requiera, por ejemplo) siempre se puede recuperar una matriz de la lista (que es una copia de la matriz interior List<T>'s) así:

String[] s = yourListOfString.ToArray(); 
0

Si va más adelante conocer la longitud de la matriz se puede crear la matriz inicial de la siguiente manera:

String[] array; 

Y más tarde cuando se conoce la longitud se puede finalizar la inicialización como este

array = new String[42]; 
11

No tiene que especificar el tamaño de una matriz cuando crea una instancia.

Aún puede declarar la matriz y crear una instancia más adelante. Por ejemplo:

string[] myArray; 

... 

myArray = new string[size]; 
-2

string foo = "Apple, Plum, Cherry";

cadena [] myArr = null;

myArr = foo.División(',');

+0

¡No es bueno convertir una cadena como esta! Esto no es asi NET split (Char()) se supone que debe hacer! ¿Qué pasa si la entrada proviene de un usuario? Deberías verificar primero para "," ?? ¡Y si has codificado una cadena, entonces sabes el tamaño de todos modos! :) – sv88erik

0

Si desea utilizar matriz sin conocer el tamaño primero hay que declararlo y más tarde se puede crear una instancia de ella como

string[] myArray; 
... 
... 
myArray=new string[someItems.count]; 
+0

¿Has visto que esto tiene una respuesta? Y cuando esto fue creado? Si intentas obtener puntos, te aconsejo que busques nuevos artículos – sv88erik

3

puede declarar una matriz vacía, como a continuación

String[] arr = new String[]{}; // declare an empty array 
String[] arr2 = {"A", "B"}; // declare and assign values to an array 
arr = arr2; // assign valued array to empty array 

se no puede asignar valores a la matriz vacía anterior como se muestra a continuación

arr[0] = "A"; // you can't do this 
Cuestiones relacionadas