2012-01-29 11 views
21

Qual è la differenza tra l'accesso agli elementi in un array di celle utilizzando parentesi () e parentesi graffe {}?Differenza tra l'accesso agli elementi della cella mediante parentesi graffe e parentesi

Ad esempio, ho provato a utilizzare cell{4} = [] e cell(4) = []. Nel primo caso impostare il 4 ° elemento [], ma nel secondo caso esso spazzato via l'elemento di cella, cioè, ha ridotto il numero di elementi cella 1.

+0

possibile duplicato di [MATLAB e gestione di array di celle in ciclo for] (http://stackoverflow.com/questions/4635052/matlab-and-cell-array-handling-in-for-loop) – Jonas

+0

Il collegamento di matematica [ accessing cell array] (http://www.mathworks.com/help/techdoc/matlab_prog/br04bw6-98.html) spiega in modo molto lucido per far sparire i tuoi concetti e quindi sei pronto per giocare con gli array . – SKM

risposta

59

Pensate a un array di celle come un normale array omogenico, i cui elementi sono tutti cell s. Le parentesi (()) consentono di accedere semplicemente all'oggetto wrapper cell, mentre l'accesso agli elementi mediante i braccialetti a ricciolo ({}) fornisce l'oggetto reale contenuto nella cella.

Per esempio,

A={ [5,6], 0 , 0 ,0 }; 

sarà simile a questa:

enter image description here

La sintassi di rendere un elemento pari a []con parentesi è in realtà una richiesta per eliminare quell'elemento, quindi quando chiedi di fare foo(i) = [] rimuovi la cella i. Non è un'operazione di assegnazione, ma piuttosto un'operazione di RemoveElement, che utilizza sintassi simile all'assegnazione.

Tuttavia, quando si esegue foo{i} = [] si assegna alla cella i-esima un nuovo valore (che è un array vuoto), cancellando in tal modo il contenuto di quella cella.

+3

puoi vedere la cella come una lista, che memorizza i puntatori a qualcos'altro. Con() ottieni i puntatori, con {} ottieni cose a cui punta il puntatore. – gstar2002

+1

Un altro modo di guardarlo è che l'assegnazione a '[]' rimuove qualsiasi cosa tu assegni. Quindi 'foo (i) = []' rimuove infatti l'i-esima cella, e 'foo {i} = []' rimuove il contenuto della cella i-esima. (Non lasciando nulla ('[]') dietro) –

+0

Dai un'occhiata a questa documentazione Octave sugli array di celle (compatibile MATLAB;)) https://www.gnu.org/software/octave/doc/v4.0.1/Indexing- Cell-Arrays.html # indicizzazione-Cell-array] –

3

vedere la guida in this link. Come vedrai, l'accesso con parentesi() ti fornisce un sottoinsieme di una cella (ad esempio una sottocella), mentre le parentesi graffe {} ti danno il contenuto della cella a cui stai tentando di accedere.