Вопрос

При использовании ряда языков программирования и библиотек я заметил различные термины, обозначающие общее количество элементов в коллекции.

Наиболее распространенными кажутся length, count, и size.

например.

array.length
vector.size()
collection.count

Есть ли какой-либо предпочтительный термин для использования?Зависит ли это от типа коллекции?то есть.изменчивый/неизменяемый

Есть ли предпочтение, чтобы это было свойство, а не метод?

Это было полезно?

Решение

Length() имеет тенденцию относиться к смежным элементам - например, строка имеет длину.

Count() имеет тенденцию относиться к количеству элементов в более свободной коллекции.

Size() обычно относится к размеру коллекции, часто он может отличаться от длины в таких случаях, как векторы (или строки), в строке может быть 10 символов, но хранилище зарезервировано для 20.Это также может относиться к количеству элементов — проверьте источник/документацию.

Capacity() - используется для обозначения выделенного пространства в коллекции, а не количества допустимых элементов в ней.Если для типа определены как «емкость», так и «размер», то «размер» обычно относится к количеству фактических элементов.

Я думаю, что основная суть кроется в человеческом языке и идиомах: размер строки не кажется очень очевидным, в то время как длина набора в равной степени сбивает с толку, даже если они могут использоваться для обозначения одного и того же (количество элементов ) в наборе данных.

Другие советы

Кстати (и это почти ничего), я предпочитаю «Count», потому что это, кажется, указывает на то, что он будет довольно однозначно возвращать количество элементов/элементов в коллекции.

Когда я сталкиваюсь с терминами «Длина» или «Размер», я часто на мгновение задаюсь вопросом (или даже вынужден перечитывать документацию), собирается ли эта чертова штука сказать мне, сколько элементов находится в коллекции или как много байтов, которые потребляет коллекция.Это особенно актуально для коллекций, которые должны быть континуальными, например массивов или строк.

Но никто из тех, кто отвечал за соглашения об именах, используемые стандартными платформами/библиотеками Java, BCL/.Net или C/C++, не удосужился спросить меня, так что вы все застряли в том, что они придумали.

Если бы я был намного умнее, чем я есть, и меня звали Бьярне, все вы могли бы быть избавлены от страданий...

Конечно, в реальном мире вам следует стараться придерживаться того соглашения об именах, которое используется используемым вами языком/платформой (например, size() на С++).Не то чтобы это помогло вам с вашими Array.Length дилемма.

Эти термины в некоторой степени взаимозаменяемы, хотя в некоторых ситуациях я бы предпочел один другому.Обычно вы можете получить наилучшее использование, если подумаете о Как бы вы словесно описали длину/размер/количество этого элемента другому человеку?.

length() подразумевает, что элемент имеет длину.Строка имеет длину.Вы говорите «длина строки 20 символов», верно?Значит, у него есть длина.

size() подразумевает, что элемент имеет размер.Например.файл имеет размер.Вы говорите «размер этого файла 2 МБ», верно?Итак, у него есть размер.

Тем не менее, строка также может иметь размер, но я бы ожидал здесь чего-то другого.Например.строка UTF-16 может иметь длину 100 символов, но, поскольку каждый символ состоит из двух байтов, я ожидаю, что размер будет равен 200.

count() очень необычно.Objective-C использует count для количества элементов в массиве.Можно спорить, имеет ли массив длину (как в Java), размер (как в большинстве других языков) или количество.Однако размер снова может быть размером в байтах (если элементы массива имеют 32-битное целое число, каждый элемент имеет размер 4 байта) и длину...Я бы не сказал, что «массив состоит из 20 элементов», для меня это звучит довольно странно.Я бы сказал: «массив состоит из 20 элементов».Я не уверен, что count хорошо это выражает, но я думаю, что count здесь — это короткая форма для elementCount() и это снова имеет гораздо больше смысла для массива, чем length() или size().

Если вы создаете собственные объекты/элементы на языке программирования, лучше всего использовать любые другие подобные элементы, поскольку программисты привыкли получать доступ к нужному свойству, используя этот термин.

Я думаю, что это самый очевидный термин для использования, если вы ищете количество элементов в коллекции.Это должно быть очевидно даже начинающим программистам, которые еще не особенно привязались к данному языку.

И это должно быть свойство, так оно и есть:описание (то есть свойство) коллекции.Метод подразумевал бы, что он должен что-то сделать с коллекцией, чтобы получить количество элементов, и это кажется неинтуитивным.

Хм... Я бы не стал использовать размер.Потому что это можно спутать с размером в байтах.Длина – может иметь некоторый смысл для массивов, если они должны использовать последовательные байты памяти.Хотя...длина...в чем?Счет ясен.Сколько элементов.Я бы использовал счетчик.

Что касается свойства/метода, я бы использовал свойство, чтобы отметить его быстро, и метод, чтобы отметить его медленно.

И самое главное — я бы придерживался стандартов языков/библиотек, которые вы используете.

Добавляю к ответу @gbjbaanb...

Если «свойство» подразумевает публичный доступ к значению, я бы сказал, что «метод» предпочтительнее просто для обеспечения инкапсуляции и сокрытия реализации.

Возможно, вы передумаете о том, как count элементы или как вы их поддерживаете count.Если это свойство, вы застряли — если доступ к нему осуществляется через метод, вы можете изменить базовую реализацию, не затрагивая пользователей коллекции.

В Elixir на самом деле существует четкая схема именования, связанная с разными типами языка.

При «подсчете» количества элементов в структуре данных Эликсир также соблюдает простое правило:функция называется size Если операция находится в постоянном времени (т.е.значение предварительно рассчитывается) или length если операция линейная (т.Расчет длины становится медленнее по мере роста входа).

Для меня это все равно, что спросить, лучше ли «foreach», чем «foreach».Это просто зависит от языка/фреймворка.

Я бы сказал, что это зависит от конкретного язык что вы используете и занятия.Например, в С#, если вы используете Array, у вас есть Свойство Длина: если у вас есть что-то, что наследуется от IEnumerable, у вас есть расширение Метод Count(), но это не быстро.И если вы унаследовали от ICollection, у вас есть Свойство Считать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top