matlab map

来源:互联网 发布:相册动画制作软件 编辑:程序博客网 时间:2024/06/05 07:37

最近看到matlab里面也有map容器啊,在c++里各种容器有时候用起来很方便,特别是组织大型数据时经常使用。而matlab由于其数组操作的灵活性,很大部分可以取代部分容器,而map容器之前倒没想到能用什么代替,map类型估计是matlab为了完善其功能而添加的。

map类型的使用在帮助里写的很清楚,简单使用一下吧。

 

map本意是映射,就是可以将一个量映射到另一个量,比如将一个字符串映射为一个数值,那个字符串就是map的key,那个值就是map的value。比如构造一个map

weekmap = containers.Map({'Monday','Tuesday'},{1,2})

则得到如下结果

weekmap =
  containers.Map handle
  Package: containers

  Properties:
        Count: 2
      KeyType: 'char'
    ValueType: 'double'
  Methods, Events, Superclasses

Count、KeyType、ValueType为map的属性,意义很明显。

 

创建完,使用起来也很简单,比如

weekmap('Monday')
ans =
     1

 

添加新的元素也很简单,可以如此

weekmap('Friday') = 5
weekmap =
  containers.Map handle
  Package: containers

  Properties:
        Count: 3
      KeyType: 'char'
    ValueType: 'double'
  Methods, Events, Superclasses

可以看到Count已经变为3了。

 

如果要检查map的内容,可以使用map的几个函数,如

keys(weekmap)
ans =
    'Friday'    'Monday'    'Tuesday'

values(weekmap)
ans =
    [5]    [1]    [2]

values(weekmap,{'Monday','Friday'})
ans =
    [1]    [5]

注意返回类型为cell。

 

连接两个map可以如下操作

>> weekmap1 = containers.Map('Thursday',4)
weekmap1 =
  containers.Map handle
  Package: containers

  Properties:
        Count: 1
      KeyType: 'char'
    ValueType: 'double'
  Methods, Events, Superclasses
>> weekmap2 = [weekmap; weekmap1]
weekmap2 =
  containers.Map handle
  Package: containers

  Properties:
        Count: 4
      KeyType: 'char'
    ValueType: 'double'
  Methods, Events, Superclasses

即使用列形式连接,而不是行连接[map1, map2];而且连接的时候,如果两个map中有相同的key值,结果以后一个map的为准

 

删除里面的内容,如下

remove(weekmap,'Monday')
ans =
  containers.Map handle
  Package: containers

  Properties:
        Count: 2
      KeyType: 'char'
    ValueType: 'double'
  Methods, Events, Superclasses

 

对于修改,如果是修改键值,跟添加一样,直接对要修改的键赋修改的键值即可;而如果想修改键,就要先删除键,然后加入新的,如下

>> remove(weekmap,'Tuesday')
ans =
  containers.Map handle
  Package: containers

  Properties:
        Count: 1
      KeyType: 'char'
    ValueType: 'double'
  Methods, Events, Superclasses
>> weekmap('Wednesday') = 3
weekmap =
  containers.Map handle
  Package: containers

  Properties:
        Count: 2
      KeyType: 'char'
    ValueType: 'double'
  Methods, Events, Superclasses

 

 

特别注意的是map类型实际上是一个对象或类,同时也是一个句柄对象,具有句柄对象的特征,跟引用差不多,比如说你将已有的map复制一份,matlab不会创建一个新的map,而是相当于给原来的取个别名,指向的是同一个map,如果修改了其内容,原来的也修改,而且如果删除那个别名,原map依然存在

另外有个小技巧,如果懒得每次新建map是还要先输入containers,可以先import,如下

import containers.Map myMap = Map('KeyType', 'char', 'ValueType', 'double');
不想再用了,可以清除
clear import
0 0