سؤال

إخراج مثل >>w = whos; إرجاع مجموعة من الهياكل. أرغب في إنشاء مجموعة من عناصرها هي العدادات من اسم حقل معين في كل بنية.

الطريقة الأكثر وضوحا للقيام بذلك لا ترجع مجموعة كما أريد، ولكن كل إجابة منفصلة.

>> w(1:2).bytes
ans =
    64
ans =
   128

يمكنني أن أفعل ذلك بحلقة، لكنه كان يتساءل عما إذا كان هناك طريقة أجمل.

هل كانت مفيدة؟

المحلول

وضع أقواس مربع حول التعبير، أي

[w(1:2).bytes]

نصائح أخرى

الوصول إلى حقل للحصول على مجموعة من الهياكل سيعود كإخراج قائمة مفصولة بفواصل (أو CSL). بمعنى آخر، الإخراج من مثالك:

w(1:2).bytes

أي ما يعادل الكتابة:

64, 128

على هذا النحو، يمكنك استخدام الإخراج في أي مكان يمكن فيه استخدام CSL. وهنا بعض الأمثلة:

a = [w(1:2).bytes];         % Horizontal concatenation = [64, 128]
a = horzcat(w(1:2).bytes);  % The same as the above
a = vertcat(w(1:2).bytes);  % Vertical concatenation = [64; 128]
a = {w(1:2).bytes};         % Collects values in a cell array = {64, 128}
a = zeros(w(1:2).bytes);    % Creates a 64-by-128 matrix of zeroes
b = strcat(w.name);         % Horizontal concatenation of strings
b = strvcat(w.name);        % Vertical concatenation of strings

في المواقف مثل هذه، باستخدام قطة هو الغرض العام أكثر. افترض أنك تريد أن تفعل الشيء نفسه مع مجموعة من الأوتار، ثم الطريقة [] لن تعمل، وستحتاج إلى استخدام:

cat(1,w(1:2).class)

وفي الحالة أعلاه،

cat(1,w(1:2).bytes)

بالإضافة إلى ذلك، تريد أن تبقي الأشياء كأعمدة في MATLAB لأداء أفضل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top