Acabo de empezar a aprender C# y en la introducción a las matrices que mostraban cómo establecer una variable como un array, pero es que parece que uno debe especificar la longitud de la matriz en la asignación, así que ¿qué pasa si no sé la longitud de la matriz?

InformationsquelleAutor UnkwnTech | 2009-03-01

11 Comentarios

  1. 108

    Matrices deben ser asignados a una longitud. Para permitir cualquier número de elementos, el uso de la Lista clase.

    Por ejemplo:

    List<int> myInts = new List<int>();
    myInts.Add(5);
    myInts.Add(10);
    myInts.Add(11);
    myInts.Count //= 3
    • ¿Qué pasa si dos Dimensiones?
    • List<int[]> myInts = new List<int[]>(); podría trabajar.
    • Si las matrices Deben estar asignados a una longitud, entonces ¿por qué no puedo hacer esto: String[] arr = «prueba;el;valores;ahora».Split(‘;’); y que sólo determina la longitud? Y, sin embargo, no puedo tomar esa misma línea de código, y mover la declaración de una variable a otra línea.
    • Dentro de la función de división, la matriz es realmente ser llamado con un tamaño fijo. Ejemplo: referencesource.microsoft.com/#mscorlib/system/…
    • Con respecto a su respuesta "Arrays must be assigned a length" — en un static método fuera de Main(), hice la declaración String[] tokens = null y no se inicializa, pero ¿cómo es que yo era capaz de llamar a "Hello.World".Split('.') en ella sin ser un System.NullReferenceException error?
  2. 37

    Uso List<> para construir una ‘matriz’ de longitud desconocida.

    Uso List<>.ToArray() para devolver una matriz real, y no un List.

    var list = new List<int>();
    list.Add(1);
    list.Add(2);
    list.Add(3);
    var array = list.ToArray();
    • Para mí, la Lista resuelto el problema del tamaño desconocido, y, a continuación,.ToArray() crea la matriz de la que yo necesitaba.
    • el uso del Sistema.Las colecciones.Genérico;
  3. 16

    Un poco de información de fondo:

    Como se dijo, si usted desea tener un conjunto dinámico de las cosas, el uso de un List<T>. Internamente, una Lista se utiliza una matriz de almacenamiento también. Esta matriz tiene un tamaño fijo, igual que cualquier otra matriz. Una vez que se declara una matriz como tener un tamaño, no cambia. Cuando se agrega un elemento a una List, a la que se añade a la matriz. Inicialmente, el List comienza con una matriz que creo que tiene una longitud de 16. Cuando intenta agregar el 17 de elemento a la List, lo que pasa es que una nueva matriz se asigna, que es (creo) el doble del tamaño de la antigua, de modo de 32 elementos. A continuación, el contenido de la antigua matriz se copia en la nueva matriz. Así, mientras que un List puede aparecer dinámico para el observador externo, internamente tiene que conformarse a las reglas así.

    Y como usted puede haber adivinado, la copia y distribución de las matrices no es gratis así que uno debe tener como objetivo, como pocos, de esos como sea posible y hacer que usted puede especificar (en el constructor de List) de un tamaño inicial de la matriz, que en un perfecto escenario es sólo lo suficientemente grande como para contener todo lo que quieras. Sin embargo, este es el micro-optimización y es poco probable que jamás te importa, pero siempre es bueno saber lo que está la verdad haciendo.

    • Esta es precisamente la información que buscaba. Spot y mucho más informativo que la mayoría de las otras respuestas. +1
  4. 15

    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, ese tamaño no se puede cambiar más adelante, si usted decide que usted necesita 100 palabras. Si usted necesita el tamaño a ser muy dinámico, usted necesitará utilizar un tipo diferente de estructura de datos. Trate de Lista.

    • Estos son todos nulos. Trate de string[] words = new string(',', size - 1).Split(','); Ahora están inicializados con "".
  5. 3

    Utilizar un ArrayList si en .NET 1.x, o un List<yourtype> si en .NET 2.0 o 3.x.

    La búsqueda de ellos en System.Collections y System.Collections.Generics.

  6. 2

    También puede que desee ver en Dictionarys si sus datos es única, Esto le dará dos columnas a trabajar con.

    Nombre de usuario , el Total de la factura

    te da un montón de construido en herramientas para la búsqueda y actualización de sólo el valor.

  7. 1
    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!");
  8. 1

    En pocas palabras, por favor, utilice Colecciones y Genéricos.

    Es una necesidad para cualquier C# developer, vale la pena invertir tiempo para aprender 🙂

  9. 1

    Como se ha detallado anteriormente, la Lista genérica<> es la mejor manera de hacerlo.

    Si usted está atascado en .NET 1.*, entonces usted tendrá que utilizar la clase ArrayList en su lugar. Este no tiene tiempo de compilación comprobación de tipo y también hay que agregar la fundición desordenado.

    Sucesivas versiones que también han puesto en marcha diversas variaciones, incluyendo los subprocesos variantes.

  10. 1

    Si usted realmente necesita para utilizar una matriz en lugar de una lista, a continuación, puede crear una matriz cuyo tamaño se calcula en tiempo de ejecución como así…

    e.g yo quiero una matriz bidimensional de tamaño n. n será recibido en tiempo de ejecución desde el usuario

    int n = 0;
    bool isInteger = int.TryPase(Console.ReadLine(), out n);
    var x = new int[n,n];
    • asimismo, para una matriz de una dimensión, voy a escribir: var x = new int[n];

Dejar respuesta

Please enter your comment!
Please enter your name here