2010-10-07 79 views
3

可能重複:
How to concatenate a number to a variable name in MATLAB?
MATLAB: How can I use a variables value in another variables name?Matlab-如何基於其他變量的值命名新變量?

我想名稱中使用的函數給出其他變量的值的變量。 因此,如果我的值爲x1,x2,我可以將新變量的名稱設爲:

x_(x1's value)_(x2的值)作爲名稱。

我已經簽出了eval,num2str,strcat函數,但是至今我還是無法做到這一點,所以我有一個變量名稱,上面我可以指定一個值。

任何幫助將不勝感激。

+3

這聽起來像你應該使用數組來代替。 – JoshD 2010-10-07 18:40:41

+4

這種事情已經被覆蓋了幾次:[Matlab的:在另一個變量名稱中使用變量的值?](http://stackoverflow.com/questions/3346178/matlab-using-a-variables-value-in -another-variables-name),[如何在MATLAB中將數字連接到變量名?](http://stackoverflow.com/questions/2809635/how-to-concatenate-a-number-to-a-variable -name-in-matlab),[使用MATLAB循環函數來命名計算變量](http://stackoverflow.com/questions/3143959/using-matlab-loop-funtion-to-name-calculate-variables)。 – gnovice 2010-10-07 18:44:59

+4

閱讀@MatlabDoug的錯誤編碼實踐列表,特別是第一點http://blogs.mathworks.com/videos/2010/03/08/top-10-matlab-code-practices-that-make-me -cry/ – Amro 2010-10-07 18:53:05

回答

1

假設你有一個很好的理由說明你爲什麼要這麼做(假設x1和x2有整數值),你可以通過組合EVALSPRINTF來做到這一點。

x1 = 3; 
x2 = 4; 
newValue = 25; 
eval(sprintf('x_%i_%i = newValue;',x1,x2)); 

如果x1和x2是花車,它會因爲一個變量名不能有圓點它,雖然它仍然是可能的,只要你更換別的點是棘手。

但是,我真的不得不問:你確定你想這麼做嗎?因爲目前我無法想象一個應用程序想要創建你事先不知道的變量名,這反過來又使得編寫高效程序變得非常困難。

編輯

有存儲陣列中的數據很多有用的方法。如果你真的不想這樣做,你可能有興趣通過MAP中的鍵/值對訪問數據,該功能可用於更新版本的Matlab。因此,您的密鑰將變爲sprintf('%i_%i',x1,x2),並且相應的值將是您想要存儲的任何值。

2

看看下面的FAQ:

它回答你的問題的「如何」部分,建議使用數組的更好方法。

+1

我不想使用數組。 – max 2010-10-07 18:45:51

+0

@max:你有沒有不使用數組的好理由,還是你只使用壞的解決方案? – Doresoom 2010-10-08 14:24:42

2

作爲Jonas suggests,如果x1x2是數字工作的:

x1 = 3; 
x2 = 4; 
newValue = 25; 

eval(sprintf('x_%i_%i = newValue;',x1,x2)); 

如果x1x2是字符串,這將成爲:

x1 = 'foo'; 
x2 = 'bar'; 
newValue = 25; 

eval(sprintf('x_%s_%s = newValue;',x1,x2)); 

或者更簡單(使用串聯代替的sprintf) :

x1 = 'foo'; 
x2 = 'bar'; 
newValue = 25; 

eval(['x_' x1 '_' x2 ' = newValue']); 

我不知道你在努力完成什麼,但這可能不是最好的辦法。 EVAL should always be avoided.在使用EVAL中創建變量(也稱爲「poofing」)是非常糟糕的。

如果你想用的參數值相關聯,structures是一個更好的解決方案:

x1 = 'foo'; 
x2 = 'bar'; 
newValue = 25; 

x.([x1 '_' x2]) = newValue; 
相關問題