How can I assign several values from cell-array tovariables?

조회 수: 4 (최근 30일)
Diego R
Diego R 2019년 9월 4일
답변: Diego R 2019년 9월 5일
I have the cell array from the example:
myNum = [1, 2, 3]; myCell = {'one', 'two'}; myStruct.Field1 = ones(3); myStruct.Field2 = 5*ones(5);
C = {myNum, 100*myNum; myCell, myStruct}
C = 2x2 cell array
{1x3 double} {1x3 double}
{1x2 cell } {1x1 struct}
I want to receive:
a=1
b=2
c=3
I've tried to do these, but didn't work:
[a,b,c]=C{1,1}
[a,b,c]=deal(C{1,1}(1,:))
I need to do in one time because my real code has dozens of values.
Thanks in advance for answers.

채택된 답변

Kelly Kearney
Kelly Kearney 2019년 9월 4일
I think you'll need to use a quick intermediate variable so you can convert the numeric array to a comma-separated list:
tmp = num2cell(C{1,1});
[a,b,c] = deal(tmp{:})
  댓글 수: 1
Star Strider
Star Strider 2019년 9월 5일
In more recent MATLAB releases, deal isn’t necessary.
Just use:
[a,b,c] = tmp{:}

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Walter Roberson
Walter Roberson 2019년 9월 5일
Unfortunately the temporary variable is still a practical necessity. It can be done away with, at cost:
[a,b,c] = subsref(num2cell(C{1,1}), struct('type', '{}', 'subs', {{':'}}))
but it becomes a lot easier if you define
VECEXPAND = @(VEC) VEC{:};
DEALVEC = @(VEC) VECEXPAND(num2cell(VEC));
[a, b, c] = DEALVEC(C{1,1})

Diego R
Diego R 2019년 9월 5일
Thanks a lot. It works. But it is a shame there isn't a direct way.

카테고리

Help CenterFile Exchange에서 Entering Commands에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by