matlab高级数据Containers.Map

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')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值