hash数据结构
高级数据类型是containers.Map,我们可以把它叫做映射表。它和函数映射有些类似,比如函数映射的定义是: F(x) = Y
针对每一个X,都有一个唯一的Y与之对应,反之不一定。如图Fig.1所示。和函数映射相似,映射表用来形容键(Key)和键值(Key Value)之间的一一对应关系。每个Key都是独一无二的,且只能对一个Key Value。
1.基础操作
keySet = {'a','b','c'};
valueSet = {1,2,3};
mapObj = containers.Map(keySet,valueSet,'UniformValues',false);
This map allows nonnumeric values, so
mapObj('d') = 'OK';
values(mapObj)具体的方法有:
1. isKey Determine if containers.Map object contains key
2. keys Identify keys of containers.Map object
3. length Length of containers.Map object
4. remove Remove key-value pairs from containers.Map object
5. size Size of containers.Map object
6. values Identify values in containers.Map object
2.应用
使用hash表可以方便查询数据,如根据名字查对应的电话,根据股票编号查股价。
3.优点
相对于元胞,结构体,查询更高效。降低数据的处理时长。
4.例子
产生3位1-5的随机数,模拟1000次,保存没有重复的数字。containers.Map避免对历史生成的矩阵做判断。
% matlab hash表
k=1;
mydictionary = containers.Map
for i=1:1000
vector=unidrnd(5,1,3);
id = num2str(vector) ;
% 验证是否已经构建给过
if ~mydictionary.isKey(id)
mydictionary(id) = vector ; % 插入数据
B(k,:) = vector;
k=k+1;
% 做你要做的工作
end
end
fn = '不同子流域的植被类型1.xlsx';%读取excel文件
[num1 txt1 raw1]=xlsread(fn);
%逐个数字读取对应的索引
k=1;
mydictionary = containers.Map
for i=2:length(raw1)
vector=[raw1{i,1},num2str(raw1{i,2})];
% 验证是否已经构建给过
if ~mydictionary.isKey( vector)
mydictionary( vector) = vector ; % 插入数据
Data(k,1:2) ={raw1{i,1},raw1{i,2}};
k=k+1;
% 做你要做的工作
end
end
xlswrite(fn,Data,'answer')