matlab线性平面映射求通项_[转]MATLAB映射表数据结构containers.Map[by oopmatlab]

MATLAB常用基本数据类型有:整型,浮点型,字符型,函数句柄,元胞数组和结构体数组。除了这些基本数据类型,MATLAB还有很多其它的数据类型不为人熟悉,这些数据类型在编程中也非常有用。MATLAB高级数据类型系列旨在向大家介绍它们:比如containers.Map,tables,enumeration和time

series等等,它们为什么有用,用来解决什么问题,并且怎样在科学工程计算使用。本篇首先介绍containers.Map数据类型。

containers.Map简介

MATLAB中最具代表性的高级数据类型是containers.Map,我们可以把它叫做映射表。它和函数映射有些类似,比如函数映射的定义是:

F(x) = Y

针对每一个X,都有一个唯一的Y与之对应,反之不一定。如图Fig.1所示。和函数映射相似,映射表用来形容键(Key)和键值(Key

Value)之间的一一对应关系。每个Key都是独一无二的,且只能对一个Key

Value。如图Fig.2所示。

Fig.1

函数映射关系

Fig.2

containers.Map类的映射示意图

数组,元胞和结构体的局限性

开始我们先介绍一下数组,元胞数组和结构体的局限性,为什么有的时候这些基本的数据类型无法满足程序的要求,换句话说,我们为什么需要containers.Map数据结构。假设要用MATLAB来记录电话号码簿中数据,比如表Table.1所示:

Table.1 电话号码簿

姓名

电话号码

Abby

5086470001

Bob

5086470002

Charlie

5086470003

先讨论数组,因为电话号码簿中既含有数字,又含有字符串,而数组中只能存放Double类型的数据,所以没有办法用数组直接记录电话号码薄中的内容。

再试试元胞数组,我们在第1行预先声明一个3

X 3的元胞数组,然后在2-4行按顺序填放号码簿的内容。

% 元胞数组初始化

addressBook

= cell(3,1);

% 预分配大小是MATLAB编程的好习惯

addressBook{1}

= {'Abby',

'5086470001'};

addressBook{2}

= {'Bob'

, '5086470002'};

addressBook{3}

= {'Charlie',

'5086470003'};

需要的时候,可以通过for循环访问其中的内容,比如:

for iter

= 1:length(addressBook)

% 元胞数组的遍历

addressBook{iter}

% 通过Index访问元胞中的内容

end

但是按照顺序遍历电话号码簿没有什么实际用处,号码簿的主要功能应该是提供查找的功能才是。比如要想查询Charlie的电话号码,我们希望程序最好可以写成如下这样:

CharlieNum

= addressBook{'Charlie'}

% 提示:这是错误的写法

或者

CharlieNum

= addressBook.Charlie

% 提示:这是错误的写法

但是元胞数组的值只能通过Index去访问内容,不支持如上的访问方式。所以为了找到Charlie的电话号码,程序不得不遍历元胞中的所有内容,取出每一个元胞元素的第一列的字符串做比较,如果名字等于Charlie,则输出电话号码:

% 使用for循环查找

for iter

= 1:length(addressBook)

if strcmp(addressBook{iter}{1},'Charlie')

addressBook{iter}{2}

% 如找到则输出电话号码

break;

end

end

当然还有其他的方式来盛放电话号码簿,比如把电话和名字分别存到到两个元胞数组中去

names

= {'Abby','Bob','Charlie'};

% 用元胞放号码

numbers

= {'5086470001','5086470002','5086470001'};

% 用元胞放名字

ind

= find(strcmp(names,'Ch

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值