2012-10-22 251 views
0

我想問一下,是否有實現一個程序,可以生成點分隔符的ID「。」例如:我們可以在我們的matlab程序中使用「點」嗎?

a1.b2.c3 

請注意,我不想將點作爲字符處理,它應該像分隔符一樣。

同樣的,如果你把你的名字和你父親的名字和你爺爺的名字,像之間的點:

John.Paul.Hit 
+0

你是什麼意思的「生成ID」?你只是指字符串? –

+0

你可能會發現地圖容器有用嗎? http://www.mathworks.co.uk/help/matlab/ref/containers.mapclass.html – learnvst

回答

2

Matlab的已經使用點作爲ID的分離,特別是在IDS的結構及其領域。例如,執行

a.b = 3 

創建一個名爲a具有場結構稱爲b其本身具有價值3。閱讀關於structures和功能struct主題的文檔。

6

您可以這樣做,正如指出的那樣。但是,你應該認識到它的效率會降低

A = 3; 
B.C.D.E = 3; 

whos A B 
    Name  Size   Bytes Class  Attributes 

    A   1x1     8 double    
    B   1x1    536 struct    

請參閱B,花了更多的存儲比沒有A.

此外,您還需要認識到,AB和AC不在MATLAB不同的對象,但是是同一個結構的一部分,答:事實上,如果我現在嘗試創建AB,它會變得不安,因爲A已經存在爲double。

A.B = 4 
Warning: Struct field assignment overwrites a value with class "double". See MATLAB R14SP2 Release Notes, Assigning Nonstructure Variables As Structures 
Displays Warning, for details. 
A = 
    B: 4 

原始變量A不再存在。

還有時間問題。該結構將效率較低。

timeit(@() A+2) 
Warning: The measured time for F may be inaccurate because it is close to the estimated time-measurement overhead (3.8e-07 seconds). Try measuring 
something that takes longer. 

> In timeit at 132 
ans = 
    9.821e-07 

timeit(@() B.C.D+2) 
ans = 
    3.6342e-05 

看到給A加2太快,timeit無法測量它。但是,向B.C.D加2則需要30倍的時間。因此,最終,你可以用一個結構來做你想做的事情,但有很好的理由不這樣做,除非你有一個非常有效的點需求。另一個分離器在我所展示的方面效果更好。

A = 3; 
A_B_C_D = 3; 
whos A* 
    Name   Size   Bytes Class  Attributes 

    A   1x1     8 double    
    A_B_C_D  1x1     8 double    

對於這些變量中的任何一個,計算都會同樣快。

+0

+1性能評估。一個應用程序OP可以使用struct [函數參數](http://stackoverflow.com/a/11907190/957997)。特別是如果他們中的許多人都需要:) – Yamaneko

0

不符合你想要的樣子。正如上面的答案所指出的那樣,點在ML語法中具有特定的含義,並且不能用作標識符本身的一部分。

相關問題