Pregunta

Al usar varios lenguajes de programación y bibliotecas, noté varios términos utilizados para el número total de elementos en una colección.

Los más comunes parecen ser length , count y size .

ej.

array.length
vector.size()
collection.count

¿Hay algún término preferido para ser utilizado? ¿Depende de qué tipo de colección es? es decir. mutable / inmutable

¿Existe alguna preferencia de que sea una propiedad en lugar de un método?

¿Fue útil?

Solución

Length () tiende a referirse a elementos contiguos; por ejemplo, una cadena tiene una longitud.

Count () tiende a referirse a la cantidad de elementos en una colección más flexible.

Size () tiende a referirse al tamaño de la colección, a menudo esto puede ser diferente de la longitud en casos como vectores (o cadenas), puede haber 10 caracteres en una cadena, pero el almacenamiento está reservado para 20. También puede referirse al número de elementos: verifique la fuente / documentación.

Capacity () : se utiliza para referirse específicamente al espacio asignado en la colección y no al número de elementos válidos en él. Si el tipo tiene ambas " capacidad " y "tamaño" definido entonces " tamaño " generalmente se refiere al número de elementos reales.

Creo que el punto principal se debe al lenguaje y las expresiones idiomáticas humanas, el tamaño de una cadena no parece muy obvio, mientras que la longitud de un conjunto es igualmente confusa, aunque podrían usarse para referirse a la misma cosa ( número de elementos) en una colección de datos.

Otros consejos

FWIW (y eso se desvanece casi nada), prefiero 'Count' porque parece indicar que va a devolver el número de elementos / elementos de la colección de manera bastante clara.

Cuando me enfrento a los términos 'Longitud' o 'Tamaño', a menudo me pregunto por un momento (o incluso me veo obligado a volver a leer la documentación) si esa maldita cosa me va a decir cuántos elementos hay en el colección o cuántos bytes está consumiendo la colección. Esto es particularmente cierto para las colecciones que están destinadas a ser contorneadas como matrices o cadenas.

Pero nadie que fuera responsable de las convenciones de nomenclatura utilizadas por los marcos / bibliotecas estándar de Java, BCL / .Net o C / C ++ se molestó en preguntarme, así que todos están atrapados con lo que se les ocurrió.

Si solo fuera mucho más inteligente que yo y me llamaran Bjarne, todos ustedes podrían salvarse de la miseria ...

Por supuesto, en el mundo real, debe tratar de cumplir con la convención de nomenclatura que utiliza el idioma / plataforma que está utilizando (por ejemplo, size () en C ++). No es que esto parezca ayudarlo con su dilema Array.Length .

Los términos son algo intercambiables, aunque en algunas situaciones preferiría uno sobre otro. Por lo general, puede obtener el mejor uso si piensa en ¿Cómo describiría la longitud / tamaño / recuento de este elemento verbalmente a otra persona? .

length () implica que el elemento tiene una longitud. Una cadena tiene una longitud. Usted dice "una cadena tiene 20 caracteres de longitud", ¿verdad? Entonces tiene una longitud.

size () implica que el elemento tiene un tamaño. P.ej. Un archivo tiene un tamaño. Usted dice "este archivo tiene un tamaño de 2 MB", ¿verdad? Entonces tiene un tamaño.

Dicho esto, una cadena también puede tener un tamaño, pero esperaría algo más aquí. P.ej. una cadena UTF-16 puede tener una longitud de 100 caracteres, pero como cada carácter está compuesto por dos bytes, esperaría que el tamaño sea 200.

count () es muy inusual. Objective-C usa el recuento para la cantidad de elementos en una matriz. Se podría argumentar si una matriz tiene una longitud (como en Java), tiene un tamaño (como en la mayoría de los otros idiomas) o tiene un recuento. Sin embargo, el tamaño podría ser nuevamente el tamaño en byte (si los elementos de la matriz son de 32 bits int, cada elemento es de 4 bytes) y la longitud ... No diría "una matriz tiene 20 elementos de largo", eso suena bastante extraño a mi. Yo diría que "una matriz tiene 20 elementos". No estoy seguro de si count lo expresa muy bien, pero creo que count es aquí una forma corta de elementCount () y eso nuevamente tiene mucho más sentido para una matriz que length () o size () .

Si crea objetos / elementos propios en un lenguaje de programación, es mejor usar cualquier otro elemento similar, ya que los programadores están acostumbrados a acceder a la propiedad deseada usando ese término.

Count Creo que es el término más obvio para usar si estás buscando la cantidad de elementos en una colección. Eso incluso debería ser obvio para los nuevos programadores que aún no se han apegado particularmente a un idioma dado.

Y debería ser una propiedad, ya que eso es lo que es: una descripción (también conocida como propiedad) de la colección. Un método implicaría que tiene que hacer algo a la colección para obtener el número de elementos y eso simplemente no parece intuitivo.

Hmm ... no usaría el tamaño. Porque esto podría confundirse con el tamaño en bytes. Longitud: podría tener sentido para las matrices, siempre y cuando se suponga que usen bytes de memoria consecuentes. Aunque ... longitud ... ¿en qué? El recuento es claro. Cuantos elementos Yo usaría contar.

Acerca de la propiedad / método, usaría la propiedad para marcarlo rápido, y el método para marcarlo es lento.

Y lo más importante: me apegaría a los estándares de los idiomas / bibliotecas que está utilizando.

Agregando a la respuesta de @ gbjbaanb ...

Si " propiedad " implica acceso público al valor, yo diría que "método" se prefiere simplemente para proporcionar encapsulación y ocultar la implementación.

Puede cambiar de opinión sobre cómo contar elementos o cómo mantener ese count . Si es una propiedad, está atascado: si se accede a través de un método, puede cambiar la implementación subyacente sin afectar a los usuarios de la colección.

En Elixir, en realidad, hay un esquema de nomenclatura claro asociado con todos los tipos en el idioma.

  

Al "contar" el número de elementos en una estructura de datos, Elixir   también se rige por una regla simple: la función se llama size si el   la operación es en tiempo constante (es decir, el valor se calcula previamente) o    length si la operación es lineal (es decir, al calcular la longitud se obtiene   más lento a medida que crece la entrada).

Para mí, esto es un poco como preguntar si '' foreach '' es mejor que " para cada " ;. Solo depende del idioma / marco.

Diría que depende del idioma particular que esté utilizando y de las clases . Por ejemplo, en c # si está utilizando Array, tiene Propiedad Longitud, si tiene algo que hereda de IEnumerable, tiene la extensión Método Count (), pero no es rápido. Y si heredó de ICollection, tiene Propiedad Recuento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top