2012-03-24 16 views
32

tablosu ('one')% 1 gibi dize dizinine göre veriye erişmem gerekiyor. MATLAB'da böyle bir veri yapısı var mı? Nasıl uygulanır?MATLAB'de Hash Tabloları (sözlükler) nasıl kullanılır?

+7

çapraz ayrıca http://stackoverflow.com/questions/3591942/hash-tables-in-matlab – Oli

+1

tam bir kopyasını (olduğu http://www.mathworks.com/matlabcentral/answers/21130-dictionaries-of-hashtables-in-matlab adresinden kopyala) –

cevap

53

MATLAB'ın son sürümlerinde, containers.Map veri yapısı vardır. Daha fazla bilgi için MATLAB Map containers'a bakın. Bu, STRUCT'leri kullanırken bazı kısıtlamaları kaldırır. Örneğin

Eğer Containers.Map` Bu soru `için olduğu neye bakıyorsun
c = containers.Map 
c('foo') = 1 
c(' not a var name ') = 2 
keys(c) 
values(c) 
17

bir yapı karma tablosu bir tür olarak kullanılabilir:

>> foo.('one')=1 

foo = 

    one: 1 

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

ans = 

    2 

bir yapı (anahtar) belirli bir alan içeren olup sorgulamak için, isfield kullanımı:

>> isfield(foo,'two') 

ans = 

    1 

Bunun dezavantajı şema, aynı zamanda geçerli Matlab değişken isimleri olan sadece dizeler anahtar olarak kullanılabilir. Örneğin: Bu kısıtlamayı aşmak için, Oli ile bağlantılı sorudaki çözümlerden birini kullanın.

+0

Bu yaklaşımın bir başka dezavantajı, anahtarların adlarının 'namelengthmax' değerinden daha az olması gerektiğidir (63) karakter – rhombidodecahedron