Domanda

Dall'utilizzo di un certo numero di linguaggi e librerie di programmazione ho notato vari termini usati per il numero totale di elementi in una raccolta.

Il più comune sembra essere length , count e size .

ad es.

array.length
vector.size()
collection.count

C'è qualche termine preferito da usare? Dipende dal tipo di collezione che è? vale a dire. mutevole / immutabile

Esiste una preferenza per essere una proprietà anziché un metodo?

È stato utile?

Soluzione

Lunghezza () tende a riferirsi ad elementi contigui, ad esempio una stringa ha una lunghezza.

Count () tende a fare riferimento al numero di elementi in una raccolta più libera.

Size () tende a fare riferimento alla dimensione della raccolta, spesso questa può essere diversa dalla lunghezza in casi come vettori (o stringhe), ci possono essere 10 caratteri in una stringa, ma la memoria è riservata per 20. Può anche riferirsi al numero di elementi - controlla la fonte / documentazione.

Capacità () : utilizzato specificamente per fare riferimento allo spazio allocato nella raccolta e non al numero di elementi validi in essa contenuti. Se il tipo ha sia "capacità" sia e "dimensione" definito quindi "dimensione" di solito si riferisce al numero di elementi effettivi.

Penso che il punto principale sia il linguaggio umano e gli idiomi, la dimensione di una stringa non sembra molto ovvia, mentre la lunghezza di un set è ugualmente confusa anche se potrebbero essere usate per riferirsi alla stessa cosa ( numero di elementi) in una raccolta di dati.

Altri suggerimenti

FWIW (e questo è quasi del tutto assente), preferisco "Count" perché sembra indicare che restituirà il numero di elementi / elementi nella raccolta in modo abbastanza inequivocabile.

Di fronte ai termini 'Lunghezza' o 'Dimensione', mi viene spesso lasciato per un momento (o addirittura costretto a rileggere la documentazione) se la dannata cosa mi dirà quanti elementi ci sono nel colection o quanti byte sta consumando la raccolta. Ciò è particolarmente vero per le raccolte che devono essere contingenti come array o stringhe.

Ma nessuno che era responsabile delle convenzioni di denominazione utilizzate dai framework / librerie standard Java, BCL / .Net o C / C ++ si è preso la briga di chiedermelo, quindi siete tutti bloccati con qualsiasi cosa abbiano escogitato.

Se solo fossi molto più intelligente di me e mi chiamassi Bjarne, a tutti voi potrebbe essere risparmiata la miseria ...

Ovviamente, nel mondo reale, dovresti provare a rispettare qualsiasi convenzione di denominazione utilizzata dalla lingua / piattaforma che stai utilizzando (ad es. size () in C ++). Non che questo sembra aiutarti con il tuo dilemma Array.Length .

I termini sono in qualche modo intercambiabili, anche se in alcune situazioni preferirei l'uno all'altro. Di solito puoi ottenere il miglior utilizzo se pensi a Come descriveresti verbalmente la lunghezza / dimensione / conteggio di questo elemento a un'altra persona? .

length () implica che l'elemento ha una lunghezza. Una stringa ha una lunghezza. Dici " una stringa ha una lunghezza di 20 caratteri " ;, giusto? Quindi ha una lunghezza.

size () implica che l'elemento ha una dimensione. Per esempio. un file ha una dimensione. Dici "questo file ha una dimensione di 2 MB", giusto? Quindi ha una dimensione.

Detto questo, una stringa può anche avere una dimensione, ma mi aspetterei qualcos'altro qui. Per esempio. una stringa UTF-16 può avere una lunghezza di 100 caratteri, ma poiché ogni carattere è composto da due byte, mi aspetto che la dimensione sia 200.

count () è molto insolito. Objective-C utilizza count per il numero di elementi in un array. Si potrebbe obiettare se un array ha una lunghezza (come in Java), ha una dimensione (come nella maggior parte delle altre lingue) o ha un conteggio. Tuttavia, la dimensione potrebbe essere di nuovo la dimensione in byte (se gli elementi dell'array sono a 32 bit int, ogni elemento è 4 byte) e la lunghezza ... Non direi "un array è lungo 20 elementi", che suona piuttosto strano per me. Direi che "un array ha 20 elementi". Non sono sicuro che il conteggio lo esprima molto bene, ma penso che il conteggio sia qui una forma abbreviata per elementCount () e che di nuovo ha molto più senso per un array di lunghezza () o dimensione () .

Se crei oggetti / elementi propri in un linguaggio di programmazione, è meglio usare qualunque altro elemento simile utilizzi, poiché i programmatori sono abituati ad accedere alla proprietà desiderata usando quel termine.

Il conteggio credo sia il termine più ovvio da usare se stai cercando il numero di elementi in una raccolta. Ciò dovrebbe anche essere ovvio per i nuovi programmatori che non si sono ancora particolarmente affezionati a una determinata lingua.

E dovrebbe essere una proprietà così com'è: una descrizione (aka proprietà) della collezione. Un metodo implicherebbe che deve fare qualcosa per la raccolta per ottenere il numero di elementi e questo sembra semplicemente non intuitivo.

Hmm ... Non userei le dimensioni. Perché questo potrebbe essere confuso con la dimensione in byte. Lunghezza: potrebbe avere un senso per gli array, purché utilizzino i conseguenti byte di memoria. Anche se ... lunghezza ... in cosa? Il conteggio è chiaro. Quanti elementi Vorrei usare count.

A proposito di proprietà / metodo, vorrei usare la proprietà per contrassegnare che è veloce e il metodo per contrassegnare è lento.

E, il più importante, aderirei agli standard delle lingue / librerie che stai utilizzando.

Aggiunta alla risposta di @ gbjbaanb ...

Se " proprietà " implica l'accesso del pubblico al valore, direi che "metodo" si preferisce semplicemente fornire l'incapsulamento e nascondere l'implementazione.

Potresti cambiare idea su come contare elementi o su come mantenere tale contare . Se è una proprietà, sei bloccato: se viene acceduto tramite un metodo, puoi modificare l'implementazione sottostante senza influire sugli utenti della raccolta.

In Elixir esiste in realtà un chiaro schema di denominazione associato a tutti i tipi nella lingua.

  

Quando & # 8220; conteggio & # 8221; il numero di elementi in una struttura di dati, elisir   rispetta anche una semplice regola: la funzione è chiamata size se il   l'operazione è in tempo costante (ovvero il valore è pre-calcolato) o    length se l'operazione è lineare (ovvero il calcolo della lunghezza ottiene   più lento all'aumentare dell'input).

Per me, è un po 'come chiedere se " foreach " è migliore di " per ogni " ;. Dipende solo dalla lingua / dalla struttura.

Direi che dipende dalla particolare lingua che stai utilizzando e dalle classi . Ad esempio in c # se si utilizza la matrice si ha Proprietà Lunghezza, se si possiede qualcosa che eredita da IEnumerable si ha l'estensione Metodo Count (), ma non è veloce. E se hai ereditato da ICollection hai Proprietà Conteggio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top