2012-03-24 7 views
32

Potrzebuję uzyskać dostęp do danych według indeksu łańcuchowego, np. tabela ("jeden")% zwraca 1. Czy istnieje taka struktura danych w MATLAB? W jaki sposób jest wdrażany?Jak korzystać z tabel Hash (słowniki) w MATLAB?

+7

Co szukasz jest 'Containers.Map' To pytanie jest dokładną kopią http://stackoverflow.com/questions/3591942/hash-tables-in-matlab – Oli

+1

(także cross- duplikat http://www.mathworks.com/matlabcentral/answers/21130-dictionaries-of-hashtables-in-matlab) –

Odpowiedz

53

W najnowszych wersjach MATLAB istnieje struktura danych containers.Map. Aby uzyskać więcej informacji, patrz MATLAB Map containers. Spowoduje to usunięcie niektórych ograniczeń podczas korzystania z funkcji STRUCT. Na przykład

c = containers.Map 
c('foo') = 1 
c(' not a var name ') = 2 
keys(c) 
values(c) 
17

struktura może być używany jako pewnego rodzaju stołu mieszania:

>> foo.('one')=1 

foo = 

    one: 1 

>> foo.('two')=2; 
>> x = 'two'; 
>> foo.(x) 

ans = 

    2 

, do zapytania, czy struktura zawiera danej dziedzinie (Key), należy isfield:

>> isfield(foo,'two') 

ans = 

    1 

Wadą takiego schemat jest taki, że jako klucze mogą być używane tylko łańcuchy, które są również poprawnymi nazwami zmiennych Matlab. Na przykład:

>> foo.('_bar')=99; 
??? Invalid field name: '_bar'. 

Aby obejść to ograniczenie, użyj jednego z rozwiązań w pytaniu, które łączy Oli.

+0

Inną wadą tego podejścia jest to, że nazwy kluczy muszą być mniejsze niż 'namelengthmax' (63) znaków – rhombidodecahedron