Acabo de empezar a aprender C# y en la introducción a las matrices mostraron cómo establecer una variable como una matriz, pero parece que se debe especificar la longitud de la matriz en la asignación, entonces ¿qué si no sé la longitud de la matriz?Matriz de una longitud desconocida en C#
Respuesta
A las matrices se les debe asignar una longitud. Para permitir cualquier cantidad de elementos, use la clase List
.
Por ejemplo:
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
var yummy = new List<string>();
while(person.FeelsHappy()) {
yummy.Add(person.GetNewFavoriteFood());
}
Console.WriteLine("Sweet! I have a list of size {0}.", list.Count);
Console.WriteLine("I didn't even need to know how big to make it " +
"until I finished making it!");
Se puede crear una matriz con el tamaño ajustado a una variable, es decir,
int size = 50;
string[] words = new string[size]; // contains 50 strings
Sin embargo, que el tamaño no puede cambiar más adelante, si usted decide que necesita 100 palabras. Si necesita que el tamaño sea realmente dinámico, deberá usar un tipo diferente de estructura de datos. Pruebe List
.
Estos son todos nulos. Pruebe 'string [] words = new string (',', size - 1) .Split (',');' Ahora están inicializados con '" "'. – Bitterblue
Utilice un ArrayList
si está en .NET 1.xo un List<yourtype>
si está en .NET 2.0 o 3.x.
búsquelos en System.Collections
y System.Collections.Generics
.
Usa List<>
para crear una "matriz" de longitud desconocida.
Utilice List<>.ToArray()
para devolver una matriz real, y no List
.
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
tratar una lista genérica en lugar de gama
También puede ser que desee ver en dictionarys si sus datos es único, Esto le dará dos columnas a trabajar.
Nombre de usuario, factura total
le da una gran cantidad de herramientas integradas para buscar y actualizar sólo el valor.
En pocas palabras, utilice Colecciones y genéricos.
Es una necesidad para cualquier desarrollador de C#, vale la pena el tiempo para aprender :)
Un poco de información básica pasar:
Como se ha dicho, si usted quiere tener una colección dinámica de las cosas, utilizar un List<T>
. Internamente, una lista utiliza una matriz para el almacenamiento también. Esa matriz tiene un tamaño fijo al igual que cualquier otra matriz. Una vez que una matriz se declara con un tamaño, no cambia. Cuando agrega un artículo a List
, se agrega a la matriz. Inicialmente, el List
comienza con una matriz que creo que tiene una longitud de 16. Cuando intenta agregar el 17mo elemento al List
, lo que ocurre es que se asigna una nueva matriz, eso es (creo) el doble del tamaño de la viejo, entonces 32 artículos. Luego, el contenido de la matriz anterior se copia en la nueva matriz. Entonces, aunque un List
puede parecer dinámico para el observador externo, internamente debe cumplir también con las reglas.
Y como ya habrás adivinado, la copia y la asignación de las matrices no es gratuita, por lo que debes intentar tener la menor cantidad posible y para hacerlo puedes especificar (en el constructor de List
) una inicial tamaño de la matriz, que en un escenario perfecto es lo suficientemente grande como para contener todo lo que desee. Sin embargo, esto es una micro-optimización y es poco probable que alguna vez le importe a usted, pero siempre es bueno saber lo que realmente está haciendo.
Esta es precisamente la información que estaba buscando. Spot on y mucho más informativo que la mayoría de las otras respuestas. +1 –
Como se detalla anteriormente, la lista genérica <> es la mejor manera de hacerlo.
Si está atrapado en .NET 1. *, tendrá que utilizar la clase ArrayList en su lugar. Esto no tiene verificación de tipos en tiempo de compilación y también tiene que agregar casting - desordenado.
Las versiones sucesivas también han implementado varias variaciones, incluidas las variantes de seguridad de subprocesos.
- 1. ¿Matriz de longitud desconocida en MATLAB?
- 2. Inicializar matriz numpy de longitud desconocida
- 3. ¿Cómo lleno una matriz de longitud desconocida en Powershell?
- 4. Obtener longitud de matriz de cadenas de longitud desconocida
- 5. Cómo estructurar estructuras con campos de longitud de longitud desconocida en C#
- 6. ¿La mejor manera de convertir Stream (de longitud desconocida) a una matriz de bytes, en .NET?
- 7. Tamaño de matriz (longitud) en C#
- 8. Cabeceras HTTP para longitud desconocida de contenido
- 9. Calcule un hash de una secuencia de longitud desconocida en C#
- 10. Longitud de una matriz en el objetivo C
- 11. Marshalling un tamaño de matriz desconocida
- 12. Declaración de una matriz de longitud negativa
- 13. Matriz de longitud cero
- 14. División de una secuencia de longitud desconocida en un cierto número de conjuntos en R
- 15. ¿Sobrecarga de la matriz de longitud variable en C++?
- 16. ¿Metacaracidad desconocida en C/C++ cadena literal?
- 17. Cómo aumentar la longitud de una matriz
- 18. Divide matriz en fragmentos de N longitud
- 19. Cómo configurar la longitud de la matriz en C# dinámicamente
- 20. Escribir una cadena en una matriz de bytes de longitud fija en C#
- 21. ¿Hay una función estándar en C que devuelva la longitud de una matriz?
- 22. ¿Hay alguna manera de crear una matriz con una longitud variable en c?
- 23. Crear matriz de objetos C# de longitud indefinida?
- 24. ¿Se puede utilizar sizeof() para definir una longitud de matriz?
- 25. matriz JSON obtener longitud
- 26. AutoMapper establece una propiedad de matriz a una matriz de longitud cero en lugar de nulo
- 27. alloc una estructura con matriz de longitud cero usando nuevo
- 28. longitud de la matriz en Java
- 29. Cómo verificar una "longitud de matriz" en lenguaje ensamblador (ASM),
- 30. En PyTables, ¿cómo crear una matriz anidada de longitud variable?
¿Qué pasa si dos dimensiones? –
'List myInts = new List ();' podría funcionar. –
Si se debe asignar una longitud a las matrices, ¿por qué puedo hacer esto ?: String [] arr = "test; the; values; now" .Split (';'); y solo determina la duración? Y, sin embargo, no puedo tomar la misma línea de código y mover la declaración de variable a otra línea. –