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

通过使用许多编程语言和库,我注意到用于表示集合中元素总数的各种术语。

最常见的似乎是lengthcountsize

如。

array.length
vector.size()
collection.count

是否有任何首选的术语使用? 这取决于它是什么类型的集合吗?ie。可变和不可变的< / p >

是否偏好将其作为属性而不是方法?

107832 次浏览

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

< p >嗯…我不会用尺寸。因为这可能与以字节为单位的大小相混淆。 长度——对于数组来说可能有一些意义,只要它们应该使用后续字节的内存。 尽管长度…在什么? 计数清楚了。有多少个元素。我会使用count.

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

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

如果你在寻找一个集合中项目的数量,我认为Count是最明显的术语。这一点对于那些还没有特别喜欢某门语言的新程序员来说应该是显而易见的。

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

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

Count()倾向于指松散集合中的元素数量。

Size()倾向于指集合的大小,通常这可能与向量(或字符串)的长度不同,字符串中可能有10个字符,但存储空间为20个。它也可以指元素的数量-检查源代码/文档。

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

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

补充一下@gbjbaanb的答案…

如果“property”意味着对值的公共访问,我会说“method”只用于提供封装并隐藏实现。

你可能会改变你的想法,关于如何count元素或如何维护count。如果它是一个属性,那么您就陷入了困境——如果它是通过一个方法访问的,那么您可以在不影响集合用户的情况下更改底层实现。

这两个术语在某种程度上是可以互换的,尽管在某些情况下,我更喜欢其中一个。通常,如果你考虑你会如何向另一个人描述这个元素的长度/大小/数量?,你可以得到最好的使用

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

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

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

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

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

FWIW(这是消失的接近于零),我更喜欢“计数”,因为它似乎表明,它将返回的元素/项目的数量在集合中相当明确。

当面对术语“长度”或“大小”时,我经常会想一会儿(甚至被迫重新阅读文档),这该死的东西是否会告诉我集合中有多少元素或集合消耗了多少字节。对于数组或字符串之类的随机集合尤其如此。

但是没有人负责Java使用的命名约定,BCL/。Net,或C/ c++标准框架/库都懒得问我,所以你们都被他们提出的东西困住了。

要是我比现在聪明得多,叫比雅恩就好了,你们所有人也许都能免于痛苦……

当然,在现实世界中,您应该尝试坚持您所使用的语言/平台所使用的任何命名约定(例如。, size()在c++)。这似乎并不能帮助你解决Array.Length的困境。

我会说这取决于你正在使用的特定语言。例如,在c#中,如果你使用数组,你有财产 Length,如果你有继承IEnumerable的东西,你有扩展方法 Count(),但它并不快。如果你从ICollection继承,你有财产 Count。

在Elixir中,实际上有一个跨语言类型的明确的命名方案。

当“计数”数据结构中的元素数量时,Elixir 也遵循一个简单的规则:如果 操作是在常数时间(即值是预先计算的)或 length如果操作是线性的(即计算长度得到

芬兰湾的科特林回答

从_Collections.kt

/**
* Returns the number of elements in this collection.
*/
@kotlin.internal.InlineOnly
public inline fun <T> Collection<T>.count(): Int {
return size
}