我想問一下,是否有實現一個程序,可以生成點分隔符的ID「。」例如:我們可以在我們的matlab程序中使用「點」嗎?
a1.b2.c3
請注意,我不想將點作爲字符處理,它應該像分隔符一樣。
同樣的,如果你把你的名字和你父親的名字和你爺爺的名字,像之間的點:
John.Paul.Hit
我想問一下,是否有實現一個程序,可以生成點分隔符的ID「。」例如:我們可以在我們的matlab程序中使用「點」嗎?
a1.b2.c3
請注意,我不想將點作爲字符處理,它應該像分隔符一樣。
同樣的,如果你把你的名字和你父親的名字和你爺爺的名字,像之間的點:
John.Paul.Hit
Matlab的已經使用點作爲ID的分離,特別是在IDS的結構及其領域。例如,執行
a.b = 3
創建一個名爲a
具有場結構稱爲b
其本身具有價值3
。閱讀關於structures
和功能struct
主題的文檔。
您可以這樣做,正如指出的那樣。但是,你應該認識到它的效率會降低
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
對於這些變量中的任何一個,計算都會同樣快。
+1性能評估。一個應用程序OP可以使用struct [函數參數](http://stackoverflow.com/a/11907190/957997)。特別是如果他們中的許多人都需要:) – Yamaneko
不符合你想要的樣子。正如上面的答案所指出的那樣,點在ML語法中具有特定的含義,並且不能用作標識符本身的一部分。
你是什麼意思的「生成ID」?你只是指字符串? –
你可能會發現地圖容器有用嗎? http://www.mathworks.co.uk/help/matlab/ref/containers.mapclass.html – learnvst