计数与长度与大小的集合

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

最常见的似乎是lengthcountsize

例如。

 array.length vector.size() collection.count 

有没有优先使用的术语? 它取决于它是什么types的集合? 即。 可变/不可变

有没有一种偏好,而不是一种方法属性?

Length()往往指的是连续的元素 – 例如一个string的长度。

Count()往往是指宽松集合中元素的数量。

Size()往往是指集合的大小,通常这可能会不同于向量(或string)的情况下的长度,可能有一个string中的10个字符,但存储为20保留。它也可能引用到元素的数量 – 检查源/文档。

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

我认为重点是人类的语言和习惯用法,一个string的大小似乎并不明显,而一个集合的长度同样令人困惑,尽pipe它们可能被用来指代相同的东西(元素的数量)在一个数据集合中。

FWIW(而且几乎没有任何东西),我更喜欢'Count',因为它似乎表明它将非常不重复地返回集合中元素/项目的数量。

当面对“长度”或“大小”这个术语时,我经常会想(或者甚至被迫重新阅读文档)这个该死的东西是要告诉我这个集合中有多less元素,集合正在消耗很多字节。 对于打算像数组或string那样的contingous的集合,情况尤其如此。

但是没有人对Java,BCL / .Net或C / C ++标准框架/库所使用的命名约定负责,这些问题让我困扰,所以你们都坚持不懈。

如果只有我比我聪明得多,并命名为Bjarne,你们所有人都可以幸免于难。

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

这些术语有些可以互换,但在某些情况下,我宁愿一个又一个。 通常情况下,如果你考虑一下,你会得到最好的用法。你如何描述这个元素的长度/大小/数量口头给另一个人?

length()意味着元素有一个长度。 一个string有一个长度。 你说“一个string是20个字符长”,对吗? 所以它有一个长度。

size()意味着元素有一个大小。 例如,一个文件有一个大小。 你说“这个文件的大小是2MB”,对吗? 所以它有一个大小。

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

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

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

嗯…我不会使用大小。 因为这可能与字节大小混淆。 长度 – 对于数组来说可能是有意义的,只要它们应该使用随后的内存字节。 虽然…长度…在什么? 伯爵清楚。 有多less元素 我会用count。

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

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

如果您正在查找集合中的项目数,我认为是最明显的术语。 对于那些还没有特别关注某种特定语言的新程序员来说,这甚至是显而易见的。

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

添加到@ gbjbaanb的答案…

如果“财产”意味着公众获得价值,那么我会说“方法”只是简单地提供封装和隐藏实现。

你可能会改变你的想法,如何count元素或如何保持这一点。 如果它是一个属性,那么就会陷入困境 – 如果它是通过方法进行处理的,则可以更改底层实现,而不会影响集合的用户。

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

我会说这取决于你正在使用的特定语言 。 例如在c#中,如果你使用的是数组,你有属性长度,如果你有从IEnumerableinheritance的东西,你有扩展方法 Count(),但不是很快。 如果你从ICollectioninheritance你有财产数量。

在Elixir中,实际上有一个明确的命名scheme,在不同types的语言中与它相关联。

当对一个数据结构中元素的数量进行“计数”时,Elixir也遵循一个简单的规则:如果操作是在一个恒定的时间(即该值是预先计算的),则该函数被命名为size ,如果该操作是线性的即计算长度随着input的增长而变慢)。