zoukankan      html  css  js  c++  java
  • Matlab 中实用数据结构之 containers.Map

    概要

     
    熟悉 Python 的都知道字典 Dict 类型数据结构功能的强大,Matlab 中虽然有表结构,但是其列名必须是亦变量名类型的字符串,如果我想用数字开头的字符串作键值,其表结构就无能为力了。此时 containers.Map 就派上用场了。

     


    初始化操作

     

    containers.Map 初始化一般有两种方式。第一种是先声明一个 Map 对象,然后依次添加键值对,示例如下:

    >> stocks = containers.Map;     % 声明 Map 对象
    >> stocks('000300.SH') = [100, 3000.0];   % 添加数据
    >> stocks('000200.SH') = [200, 2000.0];
    >> stocks('000100.SH') = [300, 2500.0];
    >> stocks
    
    stocks = 
    
      Map - 属性:
    
            Count: 3          
          KeyType: char
        ValueType: any
    
    >> stocks.Count    % 获取 stocks 中有几条记录
    
    ans =
    
      uint64
    
       3
    
    >> stocks('000300.SH')  % 获取键 '000300.SH' 对应的值
    
    ans =
    
             100        3000
    
    >> stocks.keys   % 返回由所有键组成的元组
    
    ans =
    
      1×3 cell 数组
    
        {'000100.SH'}    {'000200.SH'}    {'000300.SH'}
    
    >> stocks.values  % 返回由所有键值组成的元组
    
    ans =
    
      1×3 cell 数组
    
        {1×2 double}    {1×2 double}    {1×2 double}
    

    Map 的值几乎可以是 Matlab 中的任意类型,实际操作中可以多做尝试。特别值得一提的是,其值还可以是 Map 类型的对象,即 Map 数据类型是支持嵌套的

    第二种初始化方式是由键构成的元组,和对应数量的值直接构成 Map 数据类型,示例如下:

    >> stocks = containers.Map({'000300.SH', '000200.SH', '000100.SH'}, {[100, 3000.0], [200, 2000.0], [300, 2500.0]})
    
    stocks = 
    
      Map - 属性:
    
            Count: 3
          KeyType: char
        ValueType: any
    
    >> stocks.keys
    
    ans =
    
      1×3 cell 数组
    
        {'000100.SH'}    {'000200.SH'}    {'000300.SH'}
    
    >> stocks.values
    
    ans =
    
      1×3 cell 数组
    
        {1×2 double}    {1×2 double}    {1×3 double}
    

    如果值只是简单的标量数值,那么也可以用中括号表示的数组表示。

     

    常用方法操作

     

    假设我们已经有了上述初始化的 Map 数据类型 stocks。

    对 stocks 添加数据,直接像第一种初始化方式一样添加键值就行了。

    对 stocks 删减数据,使用 remove 方法,例如:

    
    >> stocks.remove('000100.SH')
    
    ans = 
    
      Map - 属性:
    
            Count: 2
          KeyType: char
        ValueType: any
    
    

    由三条记录变成了两条。

    对 stocks 修改键值,直接重新赋值就行,示例如下:

    >> stocks('000300.SH')
    
    ans =
    
             100        3000           0
    
    >> stocks('000300.SH') = 400;   % 对 '000300.SH' 的值进行修改
    >> stocks('000300.SH')
    
    ans =
    
       400
    
    

    另外一个常用的方法是 isKey,来判断某个字符串是 Map 数据类型中的键,如果是返回逻辑值 1, 否则返回 0. 示例如下

    >> stocks.isKey('000300.SH')
    
    ans =
    
      logical
    
       1
    
    >> stocks.isKey('555555.SH')
    
    ans =
    
      logical
    
       0
    

     


    总结

     
    containers.Map 是 Matlab 中一种非常高效且灵活的数据结构,在很多场景下大大增加了程序的可读性。有必要时就多多使用起来吧。

  • 相关阅读:
    nginx申请并配置免费https
    linux安装git
    linux安装openssl
    nginx配置支持http2
    linux服务器升级nginx
    linux 增加虚拟内存swap(使用文件)
    使用shell安装lnmp
    mysql 数据库主从同步
    Android四大组件之Service
    Android四大组件之Activity
  • 原文地址:https://www.cnblogs.com/zhoukui/p/10800121.html
Copyright © 2011-2022 走看看