Collections 集合中的计数、长度和大小

Collections 集合中的计数、长度和大小,collections,naming-conventions,terminology,semantics,Collections,Naming Conventions,Terminology,Semantics,通过使用大量编程语言和库,我注意到集合中元素总数的各种术语 最常见的似乎是长度、计数和大小 例如 是否有任何首选术语可供使用? 它是否取决于它是什么类型的集合?即可变/不可变 它是一个属性而不是一个方法吗?对我来说,这有点像问“foreach”是否比“for each”更好。这取决于语言/框架。嗯……我不会使用大小。因为这可能与字节大小相混淆。 长度-对于数组可能有一定意义,只要它们应该使用后续的内存字节。 虽然…长度…在什么地方? 计数很清楚。有多少元素。我会使用count 关于属性/方法,我

通过使用大量编程语言和库,我注意到集合中元素总数的各种术语

最常见的似乎是
长度
计数
大小

例如

是否有任何首选术语可供使用? 它是否取决于它是什么类型的集合?即可变/不可变


它是一个属性而不是一个方法吗?

对我来说,这有点像问“foreach”是否比“for each”更好。这取决于语言/框架。

嗯……我不会使用大小。因为这可能与字节大小相混淆。 长度-对于数组可能有一定意义,只要它们应该使用后续的内存字节。 虽然…长度…在什么地方? 计数很清楚。有多少元素。我会使用count

关于属性/方法,我会使用属性来标记它的快,使用方法来标记它的慢


而且,最重要的是——我会坚持您使用的语言/库的标准。

如果您要查找集合中的项目数量,我认为计数是最明显的术语。这对于那些还没有特别喜欢某种语言的新程序员来说应该是显而易见的

它应该是一个属性,因为它是:集合的描述(aka属性)。一个方法意味着它必须对集合做一些事情来获取项目的数量,而这似乎是不直观的。

Length()
倾向于引用连续的元素,例如字符串有一个长度

Count()

Size()
倾向于引用集合的大小,通常这可能与向量(或字符串)等情况下的长度不同,字符串中可能有10个字符,但存储空间保留为20个字符。也可参考元素数量-检查源/文档

Capacity()
-用于专门指集合中分配的空间,而不是其中有效元素的数量。若类型同时定义了“容量”和“大小”,那个么“大小”通常是指实际元素的数量


我认为主要问题在于人类的语言和习惯用法,字符串的大小似乎不是很明显,而集合的长度同样令人困惑,即使它们可能被用来指代数据集合中的同一事物(元素数量)。

添加到@gbjbaanb的答案中

如果“property”意味着对值的公共访问,那么我认为“method”更适合于提供封装和隐藏实现


您可能会改变对如何
计数
元素或如何维护该
计数
元素的想法。如果它是一个属性,您就被卡住了-如果它是通过一个方法访问的,您可以在不影响集合用户的情况下更改基础实现。

这些术语在某种程度上是可以互换的,尽管在某些情况下,我更喜欢一个而不是另一个。通常,如果您想一想如何向另一个人口头描述此元素的长度/大小/计数,您可以获得最佳用法?

length()
表示元素具有长度。字符串有长度。你说“一个字符串有20个字符长”,对吗?所以它有一个长度

size()
表示元素有一个大小。例如,一个文件有一个大小。你说“这个文件有2MB大小”,对吗?所以它有一个尺寸

也就是说,字符串也可以有一个大小,但我希望这里有其他的东西。例如,一个UTF-16字符串的长度可能为100个字符,但由于每个字符都由两个字节组成,因此我希望大小为200

count()
非常不寻常。Objective-C使用count表示数组中的元素数。有人可能会争论数组是否有长度(如在Java中)、大小(如在大多数其他语言中)或计数。但是,大小可能也是以字节为单位的大小(如果数组项为32位int,则每个项为4字节)和长度。。。我不会说“一个数组有20个元素长”,这听起来很奇怪。我会说“一个数组有20个元素”。我不确定count是否很好地表达了这一点,但我认为count在这里是
elementCount()
的缩写形式,这对于数组来说比length()或size()更有意义

如果在编程语言中创建自己的对象/元素,最好使用其他类似元素,因为程序员习惯于使用该术语访问所需的属性。

FWIW(这几乎是零),我更喜欢“Count”,因为它似乎表明它将非常明确地返回集合中元素/项的数量

当遇到“长度”或“大小”这两个术语时,我常常会想一想(甚至被迫重新阅读文档),这该死的东西是否会告诉我集合中有多少元素,或者集合消耗了多少字节。对于打算像数组或字符串一样连续的集合,这一点尤其正确

但是,负责Java、BCL/.Net或C/C++标准框架/库所使用的命名约定的人都懒得问我,所以他们提出的任何东西都会让你们感到困惑

如果我比我聪明多了,我的名字叫比亚恩,你们所有人都可以免于痛苦


当然,回到现实世界中,您应该尝试坚持所使用的语言/平台使用的任何命名约定(例如,C++中的
size()
)。这并不是说这似乎有助于您解决
数组.Length
难题。

我认为这取决于您使用的特定语言和类。例如,在c#中,如果使用数组,则具有属性
array.length
vector.size()
collection.count
/**
 * Returns the number of elements in this collection.
 */
@kotlin.internal.InlineOnly
public inline fun <T> Collection<T>.count(): Int {
    return size
}