2013-02-24 81 views
0

以下代碼在Matlabs容器映射中使用Matlabs的Serial Date Number作爲鍵。關鍵類型是雙重的。它是否正確?可以將Matlabs的序列號碼用作關鍵字嗎?Matlab containers.map SerialDateNumber奇怪的關鍵行爲

currDateTime='2013-02-12 11:00'; 
    dateNum=datenum(currDateTime); 
    keySet = {dateNum}; 
    currentDateNum=datestr(dateNum); 
    valueSet = {currentDateNum} ; 



    weatherFrontMap = containers.Map(keySet,valueSet); 

    weatherFrontMap(dateNum)='eleven'; 
    currDateTime='2013-02-12 12:00'; 
    dateNum=datenum(currDateTime); 
    weatherFrontMap(dateNum)='twelve'; 
    currDateTime='2013-02-12 13:00'; 
    dateNum=datenum(currDateTime); 
    weatherFrontMap(dateNum)='thirteen'; 


    currentDateNum=datestr(dateNum); 
    disp (currentDateNum) 
    str=weatherFrontMap(dateNum); 
    disp(str) 


    subtractHour=addtodate(dateNum,-1,'hour'); 
    currentDateNum=datestr(subtractHour); 
    disp (currentDateNum) 

    strSubtractHour=weatherFrontMap(subtractHour); 
    disp(strSubtractHour) 


    subtractHour2=addtodate(dateNum,-2,'hour'); 
     currentDateNum=datestr(subtractHour2); 
    disp (currentDateNum) 

    strSubtractHour2=weatherFrontMap(subtractHour2); 
    disp(strSubtractHour2) 

此打印:

12-FEB-2013 13:00:00

12-FEB-2013 12:00:00

12-Feb-2013 11:00:00

使用容器時出錯.Map/subsref

指定的密鑰不存在於此容器中。

錯誤testMap(第40行)

strSubtractHour2 = weatherFrontMap(subtractHour2);

回答

1

浮點數與地圖容器不太合適,因爲與浮點數相等的測試是有風險的(由於浮點數的存儲不精確)。

如果您使用可控制精度的日期/時間的字符串表示形式,此代碼將更好。

+0

謝謝,字符串表示很完美 – 2013-02-28 13:48:30