मान लीजिए कि मेरे पास एक स्ट्रक्चर सरणी arr
है, जहां प्रत्येक तत्व में फ़ील्ड का समूह है, जिसमें val
नामक एक भी शामिल है। मैं बहुत की तरह, कुछ निरंतर राशि से प्रत्येक तत्व के val
क्षेत्र को बढ़ाने के लिए करना चाहते हैं:मैटलैब स्ट्रक्चर सरणी के प्रत्येक तत्व में एक फ़ील्ड अपडेट करना
for i = 1:length(arr)
arr(i).val = arr(i).val + 3;
end
यह स्पष्ट रूप से काम करता है, लेकिन मैं के लिए कोड की केवल एक पंक्ति में यह करने के लिए एक तरह से होना चाहिए लग रहा है (और कोई पाश)। सबसे अच्छा मैं दो लाइनों के साथ आया हूं और एक अस्थायी चर की आवश्यकता है:
newVals = num2cell([arr.val] + 3);
[arr.val] = deal(newVals{:});
कोई विचार? धन्यवाद।
के लिए धन्यवाद 'सौदा 'पर टिप। मुझे 'सेटफील्ड' के बारे में पता नहीं था, इसलिए ऐसा लगता है कि यह एक पंक्ति में करता है, लेकिन जैसा कि आप कहते हैं, यह निश्चित रूप से फॉर-लूप समाधान से भी बदतर है। इस तरह के अनुक्रमण के लिए, मैंने इसे थोड़ी देर पहले देखा; मूल रूप से, मथवर्क का दावा है कि इस तरह की किसी भी चीज़ का समर्थन करने से पार्सर में संगतता-टूटने वाले बदलावों को मजबूर किया जाएगा। जो शर्म की बात है, क्योंकि यह लगभग हर बार जब मैं कोई मैटलैब कोड लिखता हूं तो यह मुझे खराब करता है। – Carl
इस उत्तर के लिए धन्यवाद! MATLAB 2013b में, [arr.val] = newVals {:} काम करता है लेकिन arr.val = newVals {:}। इस मामले में ब्रैकेट वास्तव में क्या करते हैं? –
'arrayfun' MATLAB में 'फॉर' लूप के लिए सिर्फ एक रैपर है, इसलिए तकनीकी रूप से आप अभी भी छिपाने के बावजूद लूप का उपयोग कर रहे हैं। – Adriaan