1. 程式人生 > >Matlab 中實用數據結構之 containers.Map

Matlab 中實用數據結構之 containers.Map

count 靈活 變量 strong 中括號 示例 python 元組 依次

概要

?
熟悉 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 中一種非常高效且靈活的數據結構,在很多場景下大大增加了程序的可讀性。有必要時就多多使用起來吧。

Matlab 中實用數據結構之 containers.Map