¿Cuál es la diferencia entre «Longitud», «Count()» y «Rango» para .neto de la matriz?

  • Matriz? o ArrayList?
InformationsquelleAutor Alexandre | 2011-07-11

6 Comentarios

  1. 51

    Length es la propiedad de la matriz de los objetos y su uso es la forma más efectiva para determinar el número de elementos de la matriz (De la matriz.De longitud en la documentación de MSDN)

    Count() es una extensión de LINQ método que realiza la eficacia de la misma. Se aplica a las matrices, ya que los conjuntos son objetos enumerables. Se prefiere el uso de Length porque Count() es probable que sea más caro (véase esta pregunta para el debate y Documentación de MSDN en cuenta para referencia)

    Rank es la propiedad que devuelve el número de dimensiones (cosa completamente diferente). Cuando se declara un array int[,] myArray = new int[5,10]; la Rank será de 2, pero se va a celebrar un total de 50 elementos (MSDN en el Rango de la propiedad).

    EDIT: gracias a Kornelije Petak de MSDN enlaces.

    • Hay alguna diferencia entre «Longitud» y «Count()» en lugar de «Count()» es una extensión de LINQ método?
    • Maslakov: tipo de matriz no tiene un Count() método en sí afaik
    • Longitud pertenece a la clase Array, y el Conde es un método de extensión para todos los Enumerable tipos. Supongo que la Matriz.La longitud es más rápido que el Count(). Sin embargo, con Count() se puede utilizar un predicado para contar el número de elementos que cumplen una condición.
    • No es el nivel extra de indirección, pero para las matrices, Count() no enumerar la matriz: matrices de implementar ICollection así la cuenta de la propiedad es lo que va a ser llamado en última instancia por el conde método de extensión, y que es la misma Longitud.
    • eso es correcto, sin embargo, en el caso de que el Count() llamada es probable que sea más caro (incluso si en algunos casos es igual de barato), que es exactamente lo que yo escribí, o me estoy perdiendo algo?
    • Yo era simplemente añadiendo un poco de información, no de atacar a su respuesta.
    • no hay problema, lo que realmente es útil la información
    • su respuesta deja fuera el hecho de que usted también puede llamar a la ICollection propiedad Count directamente, a través de var count = ((ICollection)myArray).Count; Y, por supuesto, si el array que se pasa como una colección, en primer lugar, entonces, sólo se utiliza directamente,como var count = col.Count;.

  2. 20
    • Length: Número Total de elementos en un matriz
    • LongLength: Igual que Length, pero regresó como long (en el caso de es >= 231)
    • Count(): LINQ método de extensión que funciona con otros tipos de colección así
    • Rank: Número de dimensiones en la serie (siempre 1 para los vectores). Sólo en .NET 3.5+.
    • GetLength(), GetLongLength(): Longitud de un cierta dimensión de una matriz
    • GetLowerBound(): Índice inicial de una cierta dimensión de una matriz; siempre 0 para los vectores
    • GetUpperBound(): Índice de finalización de una cierta dimensión de una matriz; siempre Length - 1 para los vectores

    Curiosamente, no hay GetLongUpperBound() o GetLongLowerBound()


    Ahora que estamos en el tema, ¿cuál es la diferencia entre un matriz y un vector en .NETA?

    Matrices frente a Vectores

    Vectores son lo que normalmente llamamos «1D» matrices en C#. Sin embargo, 1-dimensiones de las matrices en realidad no son de un tipo como int[], pero son el tipo de int[*]. C# no apoyan directamente a ellos; sin embargo, pueden ser creados con Array.CreateInstance, y puede tener distinto de cero límites inferiores. Sin embargo, son ligeramente más lento que el de los vectores, debido a que los vectores son compatibles directamente en el CLR. Porque 1-dimensiones de las matrices son en realidad rara vez se utiliza, C# ha decidido no apoyar a ellos (a pesar de que puede uso de ellos a través del uso de la var de palabras clave, de otro módulo en el cual se declara de ellos!).

  3. 2
    • Length es una propiedad de devolver el número de elementos en una Array.
    • Count() es una extensión de LINQ que hace lo mismo en un IEnumerable. Opcionalmente, se puede tomar un predicado como parámetro, y devuelve el número de elementos que satisfacen.
    • Rank es una propiedad de devolver el número de dimensiones en una Array.
  4. 1

    Length es una propiedad de Array desde C# 1.x

    Count()es un método de extensión de IEnumerable<T>, porque ahora cada T[] implementa IEnumerable<T> implícitamente.

    Tenga en cuenta que para una matriz, Count() suele ser mucho más lento que Length, debido a que el acceso Length propiedad es O(1), mientras que Count es para IEnumerable<T>, por lo que el programa necesita para ir a través de la colección y su recuento, que es O(n).

    Rank da las dimensiones de la matriz.

    • No much slower porque la implementación de Count() método tiene algunas integrado en optimizaciones sólo para ese caso. También, stackoverflow.com/questions/981254/…
    • Bueno, much slower no se base en un nivel preciso. Cuesta 10 veces el tiempo, así que me digo «mucho más lento». Pero el hecho es que, el 10 veces el tiempo es menos de 0.1 segundo.
    • pero yo no sé acerca de la «10x» en este caso. Probablemente lo lleva a uno más reparto de la operación, que básicamente es nada comparado con muy lento implementación que implique la iteración a través de todos los N elementos.
    • He probado con Stopwatch. Count() costos de 10x tiempo para un array con 10000 artículos.
    • bueno, está bien, pero el punto es que no es más complejo assymptotically
    • +1 para la efectiva respuesta
    • Esta respuesta debe ser actualizada: no es cierto que Count() enumerará la matriz: hay una optimización ahí para cualquier cosa que implementa ICollection.

  5. 0

    Longitud es el tamaño de la matriz

    Count() es la cantidad de elementos en la matriz (en el sistema.linq)

    Rango devuelve el número de dimensiones ([] [] = 2, [] = 1)

    • En realidad, el rango de una matriz de tipo T[][] es 1. Se trata de un array de una dimensión cuyos elementos son matrices unidimensionales. El tipo cuyo rango es 2 es T[,].
  6. 0

    Bien .Count() es para IEnumerable, List o ArrayList tipos. Mientras Length es para Array.

    Rank es para denotar la número de dimensiones de una matriz.

Dejar respuesta

Please enter your comment!
Please enter your name here